2013-10-10 46 views
0

我正在嘗試創建一個動態列表視圖。我可以添加一個項目,但我現在無法刪除它。代碼實際上非常簡單,我看到的每一個指南都對我和我的代碼來說太複雜了。我想在我的MainActivity中添加一些簡單的東西來刪除選中的項目。我不在乎在哪種方式,像gmail刷卡或通過點擊或任何其他方式..我只是想我簡單的方式來刪除列表中的元素。這是活動從列表視圖中刪除元素(刷卡或點擊)

public class MainActivity extends Activity { 
    private EditText etInput; 
    private Button btnAdd; 
    private ListView lvItem; 
    private ArrayList<String> itemArrey; 
    private ArrayAdapter<String> itemAdapter; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     setUpView(); 

    } 

    private void setUpView() { 
     // TODO Auto-generated method stub 
     etInput = (EditText)this.findViewById(R.id.editText_input); 
     btnAdd = (Button)this.findViewById(R.id.addbtn); 
     lvItem = (ListView)this.findViewById(R.id.listView_items); 


     itemArrey = new ArrayList<String>(); 
     itemArrey.clear(); 

     itemAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,itemArrey); 
     lvItem.setAdapter(itemAdapter); 


     btnAdd.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 

       addItemList(); 
      } 
     }); 

     etInput.setOnKeyListener(new View.OnKeyListener() { 

      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       // TODO Auto-generated method stub 

       if (keyCode == KeyEvent.KEYCODE_ENTER) { 
        addItemList(); 
       } 
       return true; 
      } 
     }); 


    } 

    protected void addItemList() { 

    if (isInputValid(etInput)) { 
     itemArrey.add(0,etInput.getText().toString()); 
     etInput.setText(""); 

     itemAdapter.notifyDataSetChanged(); 

    } 

    } 

    protected boolean isInputValid(EditText etInput2) { 
     // TODO Auto-generatd method stub 
     if (etInput2.getText().toString().trim().length()<1) { 
      etInput2.setError("Insert a value"); 
      return false; 
     } else { 
      return true; 
     } 

    } 
} 

是否可以插入部分代碼來刪除我的活動代碼中的項目?由於

回答

3

試試這個,雖然ListView項長ClickListener你可以做到這一點

lvItem.setOnItemLongClickListener(new OnItemLongClickListener() { 

     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View v, 
       int position, long id) { 
      // TODO Auto-generated method stub 
           AlertDialog.Builder adb = new AlertDialog.Builder(
        YourActivity.this); 
      adb.setTitle("Are you sure want to delete this item"); 
      adb.setPositiveButton("Yes", 
        new DialogInterface.OnClickListener() { 

         @Override 
         public void onClick(DialogInterface dialog, 
           int which) { 
          // TODO Auto-generated method stub 
          itemArrey.remove(position); 
          itemAdapter.notifyDataSetChanged(); 


         } 
        }); 
      adb.setNegativeButton("NO", 
        new DialogInterface.OnClickListener() { 

         @Override 
         public void onClick(DialogInterface dialog, 
           int which) { 
          // TODO Auto-generated method stub 
          dialog.dismiss(); 

         } 
        }); 
      adb.show(); 

      return false; 
     } 
    }); 
+0

得到這個錯誤:'類型視圖中的方法setOnLongClickListener(View.OnLongClickListener)不適用於參數(新的OnItemLongClickListener(){})' –

+0

對不起,它的工作原理! :)是可能的添加一個對話框,說「你想真的刪除這個項目?」如果是刪除它,當然沒有,不是 –

+0

在onItemClickListener方法中創建並顯示一個對話框。 要獲得對話框的結果,你可以這樣: http:// stackoverflow。com/questions/9776088/get-data-back-from-a-fragment-dialog-best-practices/14403830#14403830 然後你可以在對話框的返回方法中刪除該元素(如果用戶點擊yes ^^ ) – juanmeanwhile

0

將這個方法在你的onCreate:

lvItem .setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View v,int position, long id) { 
     itemArrey.remove(position); 
     itemAdapter.notifyDataSetChanged(); 
    }); 
} 
2

這會幫助你。

 lv.setOnItemLongClickListener(new OnItemLongClickListener() { 

      @Override 
      public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
        int position, long id) { 

       itemArrey.remove(position); 

       itemAdapter.notifyDataSetChanged(); 

       return true; 
      } 
     }); 
+0

如果有可能創建一個對話框來確認選擇是否令人驚歎。或類似的東西 –

0

做到這一點的方式..

lvItem.setOnItemLongClickListener(new OnItemLongClickListener() { 
      @Override 
      public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
        int position, long id) { 

       itemArrey.remove(position); 
       itemAdapter.notifyDataSetChanged(); 
       return true; 

      } 
     }); 
+0

請嘗試此代碼並讓我知道。等待你的反饋 –

+0

嘿murali,請atleast upvote答案,如果你認爲它是正確的 –

0

要刪除列表項只做一件事情,得到的ListView onLongClickListener。 然後打開它有兩個選項

  1. 上下文菜單中刪除

  2. 取消

當用戶拿起第一個項目從列表中刪除。然後調用listadapter notify datasetChanged方法。

0

試試下面的代碼:

單一的點擊:

listview .setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v,int position, long id) { 

      showDialog(int position); 

     }); 
    } 

public void showDialog(int position){ 
    AlertDialog alertDialog; 
AlertDialog.Builder builder = new AlertDialog.Builder(BaseActivity.this); 
    alertDialog = builder.create(); 
    alertDialog.setOnDismissListener(new myOnDismissListener()); 

    alertDialog.setTitle(TITLE OF DIALOG); 
    alertDialog.setMessage(MESSAGE YOU WANT TO SHOW IN DIALOG); 
    alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 

        YOUR ARRAY.remove(position); 
        YOUR ADAPTER.notifyDataSetChanged(); 

     } 
    }); 
    alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "CANCEL", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
     } 

    }); 
    alertDialog.show(); 
} 
+0

它的作品,但我需要做的事情來確認或不是我的選擇。像「取消」或「刪除」對話框。 –

+0

你也可以做,也可以編輯我的答案,等待一分鐘。 –

+0

看到我編輯的答案,如果你發現它有用,然後接受並upvote我的答案。 –