2012-05-11 148 views
0

我正在構建一個基於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

回答

0

最後我搞清楚,這是我如何解決它: 我改變ArrayList<Tweet> tweets = new ArrayList<Tweet>();final ArrayList<Tweet> tweets = new ArrayList<Tweet>(); 然後的onClick()方法下移動。沒有notifyDataSetChanged(),它運行良好。