0

ListView があり、JSONArray の Adapter を使用してカスタム ビューを設定します。各行には、その行を削除するボタンがありますが、その方法がわかりません。

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

どうすればそれを削除できますか?前もって感謝します

4

1 に答える 1

1

JSONArrayクラスにはメソッドがないため、removeそれを呼び出そうとしてjsonArrayも明らかに機能しません。アダプターの完全なコードを見ずに、2つのオプションがあると思います。

  1. jsonArrayオブジェクトからすべてのデータをに抽出しArrayList(複数の値がある場合は単純なデータホルダークラスを使用できます)、それをで使用しArrayListますJSONAdapterButton次に、をクリックすると、の項目を削除して、リストから要素を簡単に削除できますArrayList

  2. jsonArrayまた、現在行っているのと同じように使用して、削除された行の数と削除する必要のある正確な行への参照を保持することもできます。次に、アダプタで、「削除された」行を削除するためにメソッドgetCountとメソッドを書き直す必要があります。getItemしたがって、この状況では、実際には行を削除せず、削除済みとして表示するだけです。

私はオプション1で行きます。

于 2012-11-11T09:59:07.773 に答える