Array.remove()在onClickListener()中不会多次工作

时间:2017-06-10 13:14:51

标签: java android arrays listview

我的一个活动中有一个listview,每行中都有一个删除按钮。当我单击删除按钮时,我想从两个不同的数组中删除该行值。第一个数组是列表数组,它显示listview中的信息,第二个数组是我的sharedPreference数组,它是填充listview的数据。这在第一次运行时工作正常,但如果我尝试删除多行而不重新创建视图则无效。

这是我的代码:

deleteBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //this will delete the row from the list view
            list.remove(position);

            //this deletes the value from the sharedPreference 
            favoritesList.remove(position);

            notifyDataSetChange();
        } 
}

我第一次单击行中的删除按钮时工作正常但如果我想删除另一行,我单击另一行上的删除按钮,当从列表视图中删除该行时,它不会从我的列表中删除favoritesList数组。这意味着 favoritesList.remove(postion)仅在第一次工作。它几乎就像favoritesList没有被刷新,它只是试图删除相同的值,无论我点击什么行。这很奇怪,因为 list.remove(position)工作正常。

那么如何让 favoritesList(位置)多次运行而不会破坏?如果需要,我可以发布更多代码,但我认为这就足够了。任何帮助表示赞赏。谢谢!

以下是我的listview的整个自定义适配器:

public class ItemCustomAdapter extends BaseAdapter implements ListAdapter {
private ArrayList<String> list = new ArrayList<String>();
ArrayList<String> favoritesList;
private Context context;
//private final SharedPreferences sharedPrefs;
String[] favorites;

public ItemCustomAdapter(ArrayList<String> list, Context context, String[] favorites) {
    this.list = list;

    this.context = context;
    this.favorites = favorites;
}

@Override
public int getCount() {
    return list.size();
}

@Override
public Object getItem(int pos) {
    return list.get(pos);
}

@Override
public long getItemId(int pos) {
    return 0;
    //just return 0 if your list items do not have an Id variable.
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    //System.out.println(favoritesList);

    favoritesList = new ArrayList<String>(Arrays.asList(favorites));

    View view = convertView;
    if (view == null) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.item_list_view, null);
    }

    //Handle TextView and display string from your list
    TextView listItemText = (TextView)view.findViewById(R.id.list_item_string);
    listItemText.setText(list.get(position));

    //Handle buttons and add onClickListeners
    ImageButton deleteBtn = (ImageButton)view.findViewById(R.id.delete_btn);

    deleteBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            list.remove(position);
            favoritesList.remove(position);
            notifyDataSetChanged();
        }
    });

    return view;
}

}

1 个答案:

答案 0 :(得分:1)

正如Opiatefuchs上面所说,我所要做的就是在 getView()之外移动 favoritesList = new ArrayList(Arrays.asList(favorites));