从自定义ListView JSONArray.remove(int)undefined中删除行

时间:2012-11-11 03:29:43

标签: android android-listview

我有一个ListView,我使用JSONArray适配器使用自定义视图填充它。在每一行中,我都有一个删除该行的按钮,但我不知道该怎么做。

cancel.setOnClickListener(new View.OnClickListener() {
       public void onClick(View v) {
            AlertDialog.Builder ad = new AlertDialog.Builder(context);  
            ad.setCancelable(false);
            ad.setMessage("Are you sure?");  
            ad.setPositiveButton("Ok", new DialogInterface.OnClickListener() {  
                public void onClick(DialogInterface dialog, int which) {  
                    //jsonArray.remove(position);
                }
            });

jsonArray.remove(position)代表undefined for the typeCannot refer to a non-final variable position inside an inner class defined in a different method

我的适配器的开头是这样的:

class JSONAdapter extends BaseAdapter implements ListAdapter {

    private final JSONArray jsonArray;
    private final LayoutInflater mInflater;
    private final Context context;
    private Button pay, cancel;

    public JSONAdapter(Context context, JSONArray jsonArray) {
        this.jsonArray = jsonArray;
        this.context = context;
        mInflater = LayoutInflater.from(context);
    }

所以我想如何删除它?提前致谢

1 个答案:

答案 0 :(得分:1)

JSONArray类没有remove方法,因此尝试在jsonArray上调用它显然不起作用。如果没有看到适配器的完整代码,我会说你有两个选择:

  1. jsonArray对象中的所有数据提取到ArrayList(如果您有多个值,可以使用简单的数据持有者类)并在ArrayList中使用JSONAdapter Button。然后,当您通过移除ArrayList中的项目点击jsonArray时,您可以轻松地从列表中删除元素。

  2. 您也可以像现在一样使用getCount,然后保留对已删除的行数以及应删除的确切行的引用。然后在您的适配器中,您必须重写getItem和{{1}}方法以消除“已删除”的行。因此,在这种情况下,您实际上不会删除行,只是将它们显示为已删除。

  3. 我会选择第一选。