Android 如何从适配器类调用AsyncTask?

Android 如何从适配器类调用AsyncTask?,android,listview,android-adapter,Android,Listview,Android Adapter,我有一个带有GetMembersAsyncTask的活动类。我还有一个适配器类,带有deleteAncySctask。当我在列表视图项中单击“取消图像”时,deleteSynchctask将调用。如果成功删除该项,则我将调用deleteAnctTask中的OnPostExecute()方法 public class AddmemberSearch extends Activity { private ListViewAdapter listviewAdapter; protected void

我有一个带有
GetMembersAsyncTask
的活动类。我还有一个适配器类,带有
deleteAncySctask
。当我在列表视图项中单击“取消图像”时,
deleteSynchctask
将调用。如果成功删除该项,则我将调用
deleteAnctTask
中的
OnPostExecute()
方法

public class AddmemberSearch extends Activity {
private ListViewAdapter listviewAdapter;
protected void onCreate(Bundle savedInstanceState)
 {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.family_search_members);
    ButterKnife.inject(this);
    new GetFamilyListAsynctask().execute();
 }
class GetMembersAsyncTask extends AsyncTask<String, String, String> {
    protected void OnPreExecute(){}
    protected String doInBackground(String... params) { 
        some code here
    }
    protected void onPostExecute(String file_url) { }
}
}

这里介绍如何从适配器类调用
GetMemberAsynctask

您可以将适配器类移动到活动类中,并将适配器类设置为内部类。因此,您有权在适配器中调用GetMemberAsynctask,如下所示:

public class AddmemberSearch extends Activity {
private ListViewAdapter listviewAdapter;
protected void onCreate(Bundle savedInstanceState)
 {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.family_search_members);
    ButterKnife.inject(this);
    new GetFamilyListAsynctask().execute();
 }

public class ListViewAdapter extends BaseAdapter {
Activity context;    
private ImageButton cancel_img;
SharedPreferences sharedPrefUser;
public ListViewAdapter(Activity context, ArrayList<familiesListBO> data) {
    super();
    this.context = context;
    this.data = data;
}
@Override
public int getCount() {
    return data.size();
}
@Override
public Object getItem(int position) {
    return position;
}
@Override
public long getItemId(int position) {
    return position;
}
private class ViewHolder {
    TextView txtViewMember; 
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    final ViewHolder holder;
    LayoutInflater inflater = context.getLayoutInflater();
    FamiliesListBO familiesListBO;
    familiesListBO = data.get(position);
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.added_member_listview, null);
        holder = new ViewHolder();
        holder.txtViewMember = (TextView) convertView.findViewById(R.id.txt_addedmember_names);            
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }        
    if (familiesListBO.getName() != null) {
        holder.txtViewMember.setText(familiesListBO.getName());
        familiesListBO.getName();
    }
    cancel_img = (ImageButton) convertView.findViewById(R.id.cancel_row_img);
    cancel_img.setTag(holder);
    cancel_img.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            new DeleteAsynccTask().execute();
        }
    });
    return convertView;
}

class DeleteAsynccTask extends AsyncTask<String, String, String> {
    ResultVO getDeletionsResponse;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
    @Override
    protected String doInBackground(String... params) {
         try {                
            getDeletionsResponse = services.delete("this is delete code");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    @Override
    protected void onPostExecute(String s) {
        int appStatusCode = getDeletionsResponse.getAppStatusCode();
        if (appStatusCode == Constants.APP_STATUS_CODE_SUCCESS) {
            ExceptionMessages.showAlertDialog(context, IFamilyUtil.FAMILY_DELETE_SUCCESS_TITLE, IFamilyUtil.FAMILY_DELETE_SUCCESS_MESSAGE, true);
            new AddmemberSearch.GetMembersAsyncTask().execute();
        } else {
            ExceptionMessages.showAlertDialog(context, IFamilyUtil.FAMILY_DELETE_FAIL_TITLE, IFamilyUtil.FAMILY_DELETE_FAIL_MESSAGE, true);
        }
        notifyDataSetChanged();           
    }
}

class GetMembersAsyncTask extends AsyncTask<String, String, String> {
    protected void OnPreExecute(){}
    protected String doInBackground(String... params) { 
        some code here
    }
    protected void onPostExecute(String file_url) { }
}
public类AddmemberSearch扩展活动{
私有ListViewAdapter ListViewAdapter;
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.family\u search\u成员);
注射(这个);
新建GetFamilyListSyncTask().execute();
}
公共类ListViewAdapter扩展了BaseAdapter{
活动语境;
私人图像按钮取消\u img;
SharedReferences SharedReferuser;
公共ListViewAdapter(活动上下文、ArrayList数据){
超级();
this.context=上下文;
这个数据=数据;
}
@凌驾
public int getCount(){
返回data.size();
}
@凌驾
公共对象getItem(int位置){
返回位置;
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
私有类视窗持有者{
TextView txtViewMember;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
最终持票人;
LayoutInflater充气器=上下文。getLayoutInflater();
FamiliesListBO FamiliesListBO;
familiesListBO=data.get(位置);
if(convertView==null){
convertView=充气机。充气(R.layout.added\u member\u listview,null);
holder=新的ViewHolder();
holder.txtViewMember=(TextView)convertView.findViewById(R.id.txt_addedmember_name);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}        
if(familiesListBO.getName()!=null){
holder.txtViewMember.setText(familiesListBO.getName());
familiesListBO.getName();
}
cancel\u img=(ImageButton)convertView.findViewById(R.id.cancel\u row\u img);
取消图像设置标签(支架);
取消\u img.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图arg0){
新建DeleteAsynccTask().execute();
}
});
返回视图;
}
类DeleteAsynccTask扩展了AsyncTask{
结果获得删除响应;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
试试{
getDeletionsResponse=services.delete(“这是删除代码”);
}捕获(例外e){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串s){
int-appStatusCode=getDeletionsResponse.getAppStatusCode();
if(appStatusCode==常量。应用程序状态代码成功){
ExceptionMessages.showAlertDialog(上下文,IFamilyUtil.FAMILY\u DELETE\u SUCCESS\u标题,IFamilyUtil.FAMILY\u DELETE\u SUCCESS\u消息,true);
新建AddmemberSearch.GetMembersAsyncTask().execute();
}否则{
ExceptionMessages.showAlertDialog(上下文,IFamilyUtil.FAMILY\u DELETE\u FAIL\u标题,IFamilyUtil.FAMILY\u DELETE\u FAIL\u消息,true);
}
notifyDataSetChanged();
}
}
类GetMembersAsyncTask扩展异步任务{
受保护的void OnPreExecute(){}
受保护的字符串doInBackground(字符串…参数){
这里有一些代码
}
受保护的void onPostExecute(字符串文件\u url){}
}

我希望有帮助!

只需将ListViewAdapter放在AddMemberSearch类中

从AddMemberSearch类中删除GetMembersAsyncTask内部类

将GetMembersAsyncTask作为seprate类(将其放入包中)


之后,您可以像这样从任何地方调用“new GetFamilyListSyncTask().execute();”。

您可以将适配器类移动到活动类中,并将适配器类设置为内部类。因此您可以在适配器中调用GetMemberAsynctask。这种方法是gud。。。
public class AddmemberSearch extends Activity {
private ListViewAdapter listviewAdapter;
protected void onCreate(Bundle savedInstanceState)
 {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.family_search_members);
    ButterKnife.inject(this);
    new GetFamilyListAsynctask().execute();
 }

public class ListViewAdapter extends BaseAdapter {
Activity context;    
private ImageButton cancel_img;
SharedPreferences sharedPrefUser;
public ListViewAdapter(Activity context, ArrayList<familiesListBO> data) {
    super();
    this.context = context;
    this.data = data;
}
@Override
public int getCount() {
    return data.size();
}
@Override
public Object getItem(int position) {
    return position;
}
@Override
public long getItemId(int position) {
    return position;
}
private class ViewHolder {
    TextView txtViewMember; 
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    final ViewHolder holder;
    LayoutInflater inflater = context.getLayoutInflater();
    FamiliesListBO familiesListBO;
    familiesListBO = data.get(position);
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.added_member_listview, null);
        holder = new ViewHolder();
        holder.txtViewMember = (TextView) convertView.findViewById(R.id.txt_addedmember_names);            
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }        
    if (familiesListBO.getName() != null) {
        holder.txtViewMember.setText(familiesListBO.getName());
        familiesListBO.getName();
    }
    cancel_img = (ImageButton) convertView.findViewById(R.id.cancel_row_img);
    cancel_img.setTag(holder);
    cancel_img.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            new DeleteAsynccTask().execute();
        }
    });
    return convertView;
}

class DeleteAsynccTask extends AsyncTask<String, String, String> {
    ResultVO getDeletionsResponse;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
    @Override
    protected String doInBackground(String... params) {
         try {                
            getDeletionsResponse = services.delete("this is delete code");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    @Override
    protected void onPostExecute(String s) {
        int appStatusCode = getDeletionsResponse.getAppStatusCode();
        if (appStatusCode == Constants.APP_STATUS_CODE_SUCCESS) {
            ExceptionMessages.showAlertDialog(context, IFamilyUtil.FAMILY_DELETE_SUCCESS_TITLE, IFamilyUtil.FAMILY_DELETE_SUCCESS_MESSAGE, true);
            new AddmemberSearch.GetMembersAsyncTask().execute();
        } else {
            ExceptionMessages.showAlertDialog(context, IFamilyUtil.FAMILY_DELETE_FAIL_TITLE, IFamilyUtil.FAMILY_DELETE_FAIL_MESSAGE, true);
        }
        notifyDataSetChanged();           
    }
}

class GetMembersAsyncTask extends AsyncTask<String, String, String> {
    protected void OnPreExecute(){}
    protected String doInBackground(String... params) { 
        some code here
    }
    protected void onPostExecute(String file_url) { }
}