2014-07-16 18 views
1

我有包含其中包含按钮的项目的ListView。从外部访问自定义ListView对象

holder.btn_follow.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) {   
     new Follow_Async().execute(arr_id.get(position), arr_name.get(position)); 
    } 

    } 
}); 

这是我的AsyncTask:我从适配器类的ListView启动的AsyncTask

public class Follow_Async extends AsyncTask<String, Void, String> { 

     @Override 
     protected void onPostExecute(String result) { 

//here 
      Toast.makeText(Activity_Followers2.this, "You are now following " + result, Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     protected void onPreExecute() { 

     } 

     @Override 
     protected String doInBackground(String... params) { 

      try { 
       params_follow = new ArrayList<NameValuePair>(); 
       params_follow.add(new BasicNameValuePair("session_userid", session_userid)); 
       params_follow.add(new BasicNameValuePair("friend_userid", params[0])); 
       JSONParser jsonParser; jsonParser = new JSONParser(); 
       JSONObject json = jsonParser.makeHttpRequest(add_follow, "POST", params_follow); 
      } catch (Exception e) { 
        e.printStackTrace(); 
      } 
      return params[1]; 
     } 

    } 

在PostExecute()我想改变我刚才单击该按钮的文本取消关注。我如何从那里访问它?

回答

1

只是通过您的按钮作为参数的构造函数的AsyncTask:

在适配器:

final thisButton = holder.btn_follow; // <------------ add a final Button field 

thisButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) {   
     new Follow_Async(thisButton). //<------------- pass button to AsyncTask 
      execute(arr_id.get(position), arr_name.get(position)); 
    } 
    } 
}); 


而在的AsyncTask:

class Follow_Async extends AsyncTask<String, Void, String> { 

    private final Button button; 

    public Follow_Async(Button button) { //<------------- pass button to constructor 
     this.button = button; 
    } 


    @Override 
    protected void onPostExecute(String result) { 
     this.button.setText(""); //<--------------- do something with button 
    } 

}