![](/img/trans.png)
[英]How can i call AsyncTask from my adapter class passing String values?
[英]How to Call AsyncTask from Adapter class?
我有与GetMembersAsyncTask
活动类。 我也有一个DeleteAsynccTask
适配器类。 当我单击“列表视图”项中的“取消图像”时,将调用DeleteAsynccTask
。 如果该项目成功删除的话,我会打电话给GetMemberAsynacTask
内OnPostExecute()
的方法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
?
您可以将适配器类移动到活动类中,并使适配器类成为内部类。因此,您可以像这样在适配器中调用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) { }
}
希望对您有所帮助!
从AddmemberSearch类中删除GetMembersAsyncTask内部类
和
使GetMembersAsyncTask作为单独的类(将其放入您的包中)
之后,您可以像这样调用“新的GetFamilyListAsynctask()。execute();”。 从任何地方。
只需将ListViewAdapter放在AddMemberSearch类中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.