簡體   English   中英

如何從Android中的contextmenu刪除listview對話框項?

[英]How to delete listview dialog item from contextmenu in Android?

我有一個正在顯示列表視圖的對話框。長按列表上下文菜單中的項目時會彈出。現在在上下文菜單中按Delete時應刪除列表視圖中的相應項目。 這是我到目前為止編寫的代碼...

public class ViewContacts extends Activity {

   List<String> contacts;
   SharedPreferences prefs;
   SharedPreferences.Editor editor;
   ArrayAdapter<String> adapter;
   Dialog dialog;
   ListView lv;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       // TODO Auto-generated method stub
       super.onCreate(savedInstanceState);
        contacts = new ArrayList<String>();
       dialog = new Dialog(ViewContacts.this);
       dialog.setTitle("My Contacts");
       dialog.setContentView(R.layout.activity_mycontacts);
       dialog.setCancelable(true);

       dialog.show();
        contacts.add("Abc");
        contacts.add("xyx");
        contacts.add("klm");

       lv =(ListView)dialog.findViewById(R.id.lv);
       adapter =new ArrayAdapter<String>(this,R.layout.row,R.id.contacts,contacts);
       lv.setAdapter(adapter);
       registerForContextMenu(lv);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenu.ContextMenuInfo menuInfo) {

        MenuInflater inflater =getMenuInflater();
        inflater.inflate(R.menu.menu_list, menu);

}

@Override
public boolean onContextItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    AdapterContextMenuInfo info =(AdapterContextMenuInfo) item.getMenuInfo();
    switch (item.getItemId()) {
    case R.id.del_menu:
        contacts.remove(adapter.getItem(info.position));
        adapter.notifyDataSetChanged();
        return true;
    case R.id.can_menu:
       return true;
    default:
        break;
    }
    return super.onOptionsItemSelected(item);
}

}

menu_list.xml代碼:

<?xml version="1.0" encoding="utf-8"?>
  <menu xmlns:android="http://schemas.android.com/apk/res/android" >
       <item android:id="@+id/del_menu"
         android:title="Delete">
       </item>
        <item android:id="@+id/can_menu"
         android:title="Cancel">
       </item>


 </menu>

我的代碼沒有執行任何操作,可能是什么問題,從列表視圖刪除項目的任何建議或替代方法?

我通過使用OnItemlongclicklistener解決了這個問題。感謝@Dhara Shah的建議。

這是我的代碼。

lv.setOnItemLongClickListener(new OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                int position, long id) {
            // TODO Auto-generated method stub

            Intent i = new Intent(ViewContacts.this,Delete_Confirm.class).addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
    //I am sending position of listitem in putExtra below//     
            i.putExtra("position", position);
            startActivityForResult(i,CONFIRM);
            return true;

        }
    });

在此Delete_Confirm類中,“活動”包含自定義對話框,用於從用戶獲取是否刪除它的確認。

這就是我的Delete_Confirm.java代碼的方式:

public class Delete_Confirm extends Activity implements OnClickListener {

Dialog dialog;
Button del,cancel;
int pos;
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    Bundle bundle = getIntent().getExtras();
    pos = bundle.getInt("position");
    Log.d("msg","position is " + pos); 
    dialog = new Dialog(Delete_Confirm.this);

    dialog.setTitle("My Contacts");
    dialog.setContentView(R.layout.activity_del);
    del = (Button) dialog.findViewById(R.id.del_con);
    cancel = (Button) dialog.findViewById(R.id.no_del_con);
    del.setOnClickListener(this);
    cancel.setOnClickListener(this);
    dialog.setCancelable(true);
    dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {

        @Override
        public void onCancel(DialogInterface arg0) {
            // TODO Auto-generated method stub
            dialog.dismiss();
            finish();
        }
    });
    dialog.show();
}
@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()) {
    case R.id.del_con:
        Intent yes = this.getIntent();
        yes.putExtra("position", pos);
        this.setResult(RESULT_OK,yes);
        finish();
        break;
    case R.id.no_del_con:
        Intent no = this.getIntent();
        this.setResult(RESULT_CANCELED,no);
        finish();
        break;
    default:
        break;
    }
}

現在在onActivityResult中,我從Delete_Confirm.java的setResult()方法中獲得用戶的選擇。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
      if(requestCode==CONFIRM){

          if(resultCode==RESULT_OK){
              int posi = data.getIntExtra("position",0);
                  Log.d("msg","positionwa is " + posi);

                  Log.d("msg","Do we reach here?");
                  if(posi==0){
                  contacts.remove(posi);
                  adapter.notifyDataSetChanged();
                  }


                  else if(posi==1){
                      contacts.remove(posi);
                      adapter.notifyDataSetChanged();

                      }


                  else if(posi==2){
                      contacts.remove(posi);
                      adapter.notifyDataSetChanged();

                       }



          }
          if(resultCode==RESULT_CANCELED){
              dialog.dismiss();
              finish();
          }
      }

如果有人遇到同樣的問題,我會貼出我的答案。

長項單擊偵聽器具有位置。

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

        public boolean onItemLongClick(AdapterView<?> arg0, View v,
                int index, long arg3) {
            // TODO Auto-generated method stub
            // store the position of the item that has to be deleted 
            return true;
        }
}); 

當按下或點擊上下文菜單中的刪除時,由於您已擁有職位,在這種情況下,請從列表中刪除該項目,例如

list.remove(position);

並再次調用notifyDatasetChanged()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM