2017-01-31 12 views
1

私は主なアイテムリストを扱うアクティビティアダプタを持っています。私が削除をクリックすると、ユーザーにプロンプ​​トを出し、リストからアイテムを削除して表示を更新することを確認したいと思います。Cantは引数をOnClickListenerに渡しますか?

私はアイテムを削除するロジックを持っていますが、引数をOnClickListenerに渡す方法はないようです。リストのボタンをクリックすると、クリックされた位置を取得する方法と、正しい要素を削除できるように、その位置をOnClickListener関数に渡すにはどうすればよいですか?

すべてのヘルプは

はちょっとuはそこに1ミーステクを持って、 ラデク

@Override 
    public View getView(final int _position, View convertView, ViewGroup parent) { 

    try { 
     if(convertView == null){ 
      convertView = layoutInflater.inflate(com.mylist.www.R.layout.activity_main_row,parent,false); 
     } 

     TextView textView = (TextView) convertView.findViewById(com.mylist.www.R.id.rowText); 
     textView.setText(listItems.getJSONObject(_position).getString("description")); 

     // set the checkbox stuff 
     CheckBox chkEnabled = (CheckBox) convertView.findViewById(com.mylist.www.R.id.chkEnabled); 

     textView.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       try{ 
        if (listItems != null){ 
         JSONArray clickedItems = listItems.getJSONObject(_position).getJSONArray("listItems"); // position 
         Intent intent = new Intent(context, ListActivity.class); 

         intent.putExtra("listItems", clickedItems.toString()); 
         context.startActivity(intent); 
        } 
       } catch (Exception e){ 
        e.printStackTrace(); 
       } 

      } 

     }); 

     Button btnNavigate = (Button) convertView.findViewById(com.mylist.www.R.id.btnDelete); 
     btnNavigate.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       try{ 
        if (listItems != null){ 

         AlertDialog.Builder builder = new AlertDialog.Builder(context); 
         builder.setMessage("Are you sure?").setPositiveButton("Yes", dialogClickListener) 
           .setNegativeButton("No", dialogClickListener).show(); 
        } 
       } catch (Exception e){ 
        e.printStackTrace(); 
       } 

      } 

     }); 


     return convertView; 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 

     try { 
      switch (which){ 
       case DialogInterface.BUTTON_POSITIVE: 
        //Yes button clicked 
        listItems.remove(position); //????? how do I pass it 

        JSONObject jObj = new JSONObject(); 
        jObj.put("Items", listItems); 

        editor.putString("json",jObj.toString()); 
        editor.commit(); 

        ((MainActivity)context).refreshView(); 

        break; 

       case DialogInterface.BUTTON_NEGATIVE: 
        //No button clicked 
        break; 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
}; 

答えて

1

それは

int currentPosition; 

ストア現在のビューの位置を交換する

listitem.remove(postion) 

currentPosition = position; 

AlertDialog.Builder builder = new AlertDialog.Builder(context); 
builder.setMessage("Are you sure?").setPositiveButton("Yes", dialogClickListener) 
          .setNegativeButton("No", dialogClickListener).show(); 

して、ユーザーが

currentItemPosition = _position; 

、あなたにそれを使用するように、ボタンをクリックしたときに

int currentItemPosition; 

クラスのグローバルストア位置としてリスナー

listItems.remove(currentPosition); 
1

をありがとう、理解されるのでしょうか?ユーザーがボタンをクリックgetView()であなたが別の変数に、後で使用する上での位置を格納しないのはなぜ

listitem.remove(_position); 
+0

私はどのようにアクセスするのか分かりませんでした。あなたのコメントは私にアイデアを与えました。私は内部クラスとしてgetView内のdialogClickListenerを移動しました。この方法で、引数として渡すことなく_position変数に直接アクセスすることができました。 – Radek

+0

コーディングを使用していただきありがとうございます –

1

宣言currentItemPosition変数にそれを使用しますリスナー

listItems.remove(currentItemPosition); 
1

膨らませながら、あなたはそれぞれの行にタグを設定することができます。

view.setTag(position) 

をボタンの上に、あなたが

 button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //current row view clicked position 
       int currentItemPosition = (Integer) button.getTag(); 

       //now remove the item from the list at the clicked position 
       listItems.remove(currentItemPosition); 

      } 
     }); 

としてその行の位置を取得することができますが、その項目の位置を持つことができますこの方法をクリックしてくださいユーザーがリストビューからクリックして、さらに操作を実行します。これがあなたに役立つことを願っています

2

この実装では、私たちはポジションを得ることができません。ポジションを取得したい場合は、コードを下記のように変更してください。

AlertDialog.Builder builder = new AlertDialog.Builder(context); 
          builder.setMessage("Are you sure?").setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
           @Override 
           public void onClick(DialogInterface dialogInterface, int i) { 
            // you can get position here 
           } 
          }).setNegativeButton("No", dialogClickListener).show(); 
+0

ありがとうございました。 – Radek

関連する問題