2015-08-18 5 views
0

У меня есть класс активности с GetMembersAsyncTask. Также у меня есть один класс адаптера с DeleteAsynccTask. Когда я нажму «Отменить изображение» в списке «Просмотр», то вызывается DeleteAsynccTask. Если этот элемент удален успешно, я позвоню GetMemberAsynacTask внутри метода OnPostExecute() в DeleteAsynccTask.Как вызвать AsyncTask из класса адаптера?

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();   
    } 
} 
} 

Здесь Как позвонить GetMemberAsynctask из класса адаптера?

+1

Вы можете переместить класс адаптера внутри класса активности и сделать класс адаптера внутренним классом. У вас есть доступ для вызова GetMemberAsynctask в адаптере – Rajesh

+0

. Этот подход является gud ... –

ответ

2

Вы можете переместить свой класс адаптера внутри вашего класса активности и сделать класс адаптера в качестве внутреннего class.so у вас есть доступ для вызова 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) { } 
} 

Я надеюсь, что это помогает!

+0

Спасибо, босс ... это работает для меня –

+0

Добро пожаловать. – Rajesh

0

Проще говоря ListViewAdapter внутри класса AddMemberSearch

3

Удалить GetMembersAsyncTask Внутренний класс от класса AddmemberSearch
и
Сделать GetMembersAsyncTask как seprate класс (положить его в пакет)

После что вы можете так называть «new GetFamilyListAsynctask(). execute();» откуда угодно.

Смежные вопросы