Android notifyDataSetChanged()未从listview中删除列表项
我正在尝试从Android notifyDataSetChanged()未从listview中删除列表项,android,listview,android-listview,Android,Listview,Android Listview,我正在尝试从Listview中删除一个列表项,该列表项是使用CustomAdapter作为单击的按钮填充的。我的自定义适配器的getView()方法如下所示: public View getView(final int position, View convertView, ViewGroup parent) { final NonFollowersHolder holder; if(convertView == null){ LayoutInflater inf
Listview
中删除一个列表项,该列表项是使用CustomAdapter作为单击的按钮填充的。我的自定义适配器的getView()
方法如下所示:
public View getView(final int position, View convertView, ViewGroup parent) {
final NonFollowersHolder holder;
if(convertView == null){
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.listitem_nonfollowers, parent, false);
holder = new NonFollowersHolder();
holder.tv_fullname = (TextView)convertView.findViewById(R.id.tv_fullname);
holder.tv_username = (TextView)convertView.findViewById(R.id.tv_username);
holder.tv_bio = (TextView)convertView.findViewById(R.id.tv_bio);
holder.userpic = (NetworkImageView)convertView.findViewById(R.id.iv_userpic);
holder.action = (ImageView)convertView.findViewById(R.id.action);
convertView.setTag(holder);
}
else{
holder = (NonFollowersHolder)convertView.getTag();
}
holder.tv_fullname.setText(list.get(position).fullname);
holder.tv_username.setText(list.get(position).username);
String temp = list.get(position).bio;
holder.tv_bio.setText(temp);
holder.userpic.setImageUrl(list.get(position).profilepic, loader);
if(isUnfollow == true) holder.action.setImageDrawable(context.getResources().getDrawable(R.drawable.bt_unfollow));
else holder.action.setImageDrawable(context.getResources().getDrawable(R.drawable.bt_follow));
holder.action.setOnClickListener(new MyListener(position));
return convertView;
}
clickListener类MyListener
是:
private class MyListener implements View.OnClickListener {
private int position;
public MyListener(int position) {
this.position = position;
}
@Override
public void onClick(View v) {
String url = AppProperties.APIURL+"/users/"+list.get(position).id
+"/relationship?access_token="+session.getValue(AppProperties.ACCESS_TOKEN);
if(isUnfollow){
RequestParams params = new RequestParams();
params.put("action", "unfollow");
InstagramRestClient.post(url, params, new JsonHttpResponseHandler(){
@Override
public void onSuccess(int statusCode, Header[] headers, JSONArray response) {
System.out.println(response.toString());
list.remove(position);
notifyDataSetChanged();
}
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
System.out.println(responseString);
}
});
}
else{
RequestParams params = new RequestParams();
params.put("action", "follow");
InstagramRestClient.post(url, params, new JsonHttpResponseHandler(){
@Override
public void onSuccess(int statusCode, Header[] headers, JSONArray response) {
System.out.println(response.toString());
list.remove(position);
notifyDataSetChanged();
}
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
System.out.println(responseString);
}
});
}
}
}
但是notifyDataSetChanged()
没有刷新列表,也没有删除该项
更新
整个适配器类
public class NonFollowersAdapter extends BaseAdapter {
private List<UserInfo> list;
private Context context;
private ImageLoader loader;
private boolean isUnfollow;
private Session session;
public NonFollowersAdapter(List<UserInfo> list, Context context, boolean isUnfollow){
this.list = list;
this.context = context;
session = new Session(context);
this.isUnfollow = isUnfollow;
loader = AppController.getInstance().getImageLoader();
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final NonFollowersHolder holder;
if(convertView == null){
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.listitem_nonfollowers, parent, false);
holder = new NonFollowersHolder();
holder.tv_fullname = (TextView)convertView.findViewById(R.id.tv_fullname);
holder.tv_username = (TextView)convertView.findViewById(R.id.tv_username);
holder.tv_bio = (TextView)convertView.findViewById(R.id.tv_bio);
holder.userpic = (NetworkImageView)convertView.findViewById(R.id.iv_userpic);
holder.action = (ImageView)convertView.findViewById(R.id.action);
convertView.setTag(holder);
}
else{
holder = (NonFollowersHolder)convertView.getTag();
}
holder.tv_fullname.setText(list.get(position).fullname);
holder.tv_username.setText(list.get(position).username);
String temp = list.get(position).bio;
holder.tv_bio.setText(temp);
holder.userpic.setImageUrl(list.get(position).profilepic, loader);
if(isUnfollow == true) holder.action.setImageDrawable(context.getResources().getDrawable(R.drawable.bt_unfollow));
else holder.action.setImageDrawable(context.getResources().getDrawable(R.drawable.bt_follow));
holder.action.setOnClickListener(new MyListener(position));
return convertView;
}
static class NonFollowersHolder{
TextView tv_fullname, tv_username, tv_bio;
NetworkImageView userpic;
ImageView action;
}这个错误很愚蠢。
notifyDataSetChanged()
方法没有任何问题。我正在重写onSuccess(int statusCode,Header[]headers,JSONArray response)方法,但是我从服务器得到的响应是一个JSONObject。
因此,该方法从未被执行,因此该项没有被删除
将方法更改为
onSuccess(int statusCode,Header[]headers,JSONObject response)
,一切正常。MyListener
是CustomAdapter
类的内部类?是。它是内部类。请发布所有适配器类code@AkashSingh:但我确定列表中的最后一项正在删除?@ρ∑ρѕρєK是的,ArrayList中的项正在删除。
private class MyListener implements View.OnClickListener {
private int position;
public MyListener(int position) {
this.position = position;
}
@Override
public void onClick(View v) {
String url = AppProperties.APIURL+"/users/"+list.get(position).id
+"/relationship?access_token="+session.getValue(AppProperties.ACCESS_TOKEN);
if(isUnfollow){
RequestParams params = new RequestParams();
params.put("action", "unfollow");
InstagramRestClient.post(url, params, new JsonHttpResponseHandler(){
@Override
public void onSuccess(int statusCode, Header[] headers, JSONArray response) {
System.out.println(response.toString());
list.remove(position);
notifyDataSetChanged();
}
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
System.out.println(responseString);
}
});
}
else{
RequestParams params = new RequestParams();
params.put("action", "follow");
InstagramRestClient.post(url, params, new JsonHttpResponseHandler(){
@Override
public void onSuccess(int statusCode, Header[] headers, JSONArray response) {
System.out.println(response.toString());
list.remove(position);
notifyDataSetChanged();
}
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
System.out.println(responseString);
}
});
}
}
}