android按钮刷新

问题描述:

我正在构建一个基于android的应用程序来执行twitter搜索功能。按钮点击仅适用于第一个。如果我更改搜索词并再次单击该按钮,则无法刷新。任何人都可以给我一个提示? `公共类TwitterSActivity扩展活动实现OnClickListener { EditText etQuery; Button btnQuery;android按钮刷新

class Tweet{ 
    public String username; 
    public String message; 
    public String image_url; 
} 

ArrayList<Tweet> tweets = new ArrayList<Tweet>(); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
    StrictMode.setThreadPolicy(policy); 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    etQuery = (EditText) findViewById (R.id.et); 
    btnQuery = (Button) findViewById (R.id.btn); 
    btnQuery.setOnClickListener(this); 
} 


@Override 
public void onClick(View v){ 

    if(v.getId() == R.id.btn){ 
     Toast.makeText(this, "Query submitted", Toast.LENGTH_LONG).show(); 

     Getdata getdata = new Getdata(); 
     String returned = null; 
     String searchTerm = etQuery.getText().toString(); 
     try { 
      returned = getdata.getInternetData(searchTerm); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     try{ 
      JSONObject jo = new JSONObject(returned); 
      JSONArray ja = jo.getJSONArray("results"); 
      for(int i=0; i<ja.length(); i++){ 
       JSONObject job = ja.getJSONObject(i); 
       Tweet tt = new Tweet(); 
       tt.username = job.getString("from_user"); 
       tt.message = job.getString("text"); 
       tt.image_url = job.getString("profile_image_url"); 
       tweets.add(tt); 
      } 
     } 
     catch(JSONException e){ 
      Log.e("log_tag", "Error parsing data: "+e.toString()); 
     } 

     ListView lv = (ListView) findViewById(R.id.listView1); 

     class FancyAdapter extends ArrayAdapter<Tweet> { 

      public FancyAdapter() { 
       super(TwitterSActivity.this, android.R.layout.simple_list_item_1, tweets); 
      } 

      public View getView(int position, View convertView, ViewGroup parent){ 
       ViewHolder holder; 
       if(convertView == null){ 
        LayoutInflater inflater = getLayoutInflater(); 
        convertView = inflater.inflate(R.layout.listitem, null); 
        holder = new ViewHolder(convertView); 
        convertView.setTag(holder); 
       } 
       else 
       { 
        holder = (ViewHolder)convertView.getTag(); 
       } 
       holder.populatefrom(tweets.get(position)); 
       return(convertView); 
      } 


      class ViewHolder { 
       public TextView username = null; 
       public TextView message = null; 
       public ImageView image = null; 

       ViewHolder(View listitem){ 
        username = (TextView)listitem.findViewById(R.id.username); 
        message = (TextView)listitem.findViewById(R.id.message); 
        image = (ImageView)listitem.findViewById(R.id.avatar); 
       } 

       void populatefrom(Tweet t){ 
        username.setText(t.username); 
        message.setText(t.message); 
        image.setImageBitmap(getBitmap(t.image_url)); 
       } 
      } 
     } 

     FancyAdapter ar = new FancyAdapter(); 
     lv.setAdapter(ar); 

    } 
} 

public Bitmap getBitmap(String bitmapUrl) { 
    try { 
     URL url = new URL(bitmapUrl); 
     return BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
    } 
    catch(Exception e) {return null;} 
}` 
+0

当我添加下面的代码:Intent reload = new Intent(TwitterSActivity.this,TwitterSActivity.class); \t \t startActivity(reload);在onclick {}方法下,它现在可以刷新。但是另一个问题是内容仅出现2秒,然后消失。有人知道为什么 –

+0

我认为你需要做的是隔离新的tweets是否没有被检索(getInternetData问题)或没有被刷新/显示(问题设置值到ListView中)。设置一些breakpoints/log.d语句,看看你是否从getInternetData获得了期望。 – Gophermofur

+0

另外:1)您无需每次都重新创建并重新连接适配器。一旦你调用了tweets.add(...),你已经修改了父列表,所以你所要做的就是在适配器上调用'notifyDataSetChanged()'来强制ListView重新绘制自己。 2)将你的listview声明为一个类变量,所以你不必在每次尝试搜索时都调用findByView。 – Gophermofur

最后我搞清楚,这是我如何解决它: 我改变ArrayList<Tweet> tweets = new ArrayList<Tweet>();final ArrayList<Tweet> tweets = new ArrayList<Tweet>(); 然后的onClick()方法下移动。没有notifyDataSetChanged(),它运行良好。