如何从Adapter类调用AsyncTask的? [英] How to Call AsyncTask from Adapter class?
问题描述
我有 GetMembersAsyncTask
活动类。我也有与 DeleteAsynccTask
一个适配器类。当我点击取消列表视图项图像,然后 DeleteAsynccTask
将调用。如果该项目成功删除,然后我会打电话给 GetMemberAsynacTask
在 OnPostExecute()
方法 DeleteAsynccTask
。
i have activity class with GetMembersAsyncTask
. Also i have one Adapter class with DeleteAsynccTask
. When i click cancel image in list View item then DeleteAsynccTask
will call. If that item deleted successfully then i will call GetMemberAsynacTask
inside OnPostExecute()
method in DeleteAsynccTask
.
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) { }
}
}
现在 ListViewAdapter
类是这样的。
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();
}
}
}
下面如何从Adapter类呼叫 GetMemberAsynctask
?
Here How to Call GetMemberAsynctask
from Adapter class?
推荐答案
您可以将您的适配器类的活动类中,使适配器类内class.so你有机会调用GetMemberAsynctask适配器是这样的:
You can move your adapter class inside your activity class and make adapter class as inner class.so you have access for calling GetMemberAsynctask in adapter like this:
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) { }
}
我希望它能帮助!
I hope it helps!
这篇关于如何从Adapter类调用AsyncTask的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!