在自己写的一个项目中,需要涉及到回调。在listview的每一个item里面,有一个删除按钮,点击该删除按钮后,删除该item,对删除按钮的监听在adapter中进行,删除操作则需要在activity中进行。设置了一个interface,在点击了删除按钮后,将该item的position传递给activity。
1.在adapter中,写一个接口,用来将position传递给activity
public class CommentDetailAdapter extends BaseAdapter{
private onItemClick mListener;
<span style="white-space:pre"> </span>// ....
holder.imgBtnDel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//Log.e("del", "press del");
if( mListener != null ) {
notifyDataSetChanged();
<span style="color:#333399;">mListener.onItem(pos); //将position传递给activity</span>
}
}
});
<span style="white-space:pre"> </span>// ...
<span style="color:#333399;">public interface onItemClick{
public void onItem(int pos);
}
public void setMyListener( onItemClick onItemclick ){
this.mListener = onItemclick;
}
</span>}
public class CommentsDetailsActivity extends Activity implements onItemClick{
private PullToRefreshListView lsDetailComments;
private CommentDetailAdapter commentsAdapter;
private ArrayList<CommentEntity> commentsList;
private void initListView() {
commentsList = new ArrayList<CommentEntity>();
// commentsAdapter = new SimpleAdapter(this, getCommentsData(),
// R.layout.item_detail_comments, from, to);
commentsAdapter = new CommentDetailAdapter(this, commentsList,user,disscus);
<span style="color:#333399;">commentsAdapter.setMyListener(this); //将activity传递给adapter</span>
lsDetailComments.setAdapter(commentsAdapter);
}
class DelComment extends AsyncTask<Integer, Void, Boolean> {
@Override
protected Boolean doInBackground(Integer... params) {
// TODO Auto-generated method stub
switch (params[0]) {
case 1:
msg = CommunityService.delComment(user, commentsList.get(position));
return true;
}
return false;
}
@Override
protected void onPostExecute(Boolean result) {
// TODO Auto-generated method stub
if( msg == null || msg.length() == 0 ){
Toast.makeText(getApplicationContext(), "ɾ??ʧ??, Toast.LENGTH_SHORT);
}else {
if(msg.contains("?ɹ?") ) {
disCount = Integer.parseInt(tvDisCount.getText().toString());
disCount --;
tvDisCount.setText(disCount+"");
commentsList.remove(position);
commentsAdapter.notifyDataSetChanged();
}
}
super.onPostExecute(result);
}
}
@Override
public void onItem(int pos) {
// TODO Auto-generated method stub
position = pos;
new DelComment().execute(1); //执行删除操作
}
}