通过右键单击对话框菜单删除视图

时间:2014-03-19 20:52:25

标签: android

我找不到适用于此的方法。

我在LinearLayout中有一个TextView,它是根据需要以编程方式创建的。它有一个右键单击上下文菜单,它会召唤一个对话框,我想让用户删除TextView。所以流程右键单击TextView A - >对话 - >删除 - >选择删除TextView。

但是,我找不到可以找到并引用右键单击的原始TextView的方法。

我的上下文菜单和对话框代码如下:

   @Override  
   public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {  
        super.onCreateContextMenu(menu, v, menuInfo);  
        menu.setHeaderTitle("Choose your Fate:");  
        menu.add(0, v.getId(), 0, "Remove task from schedule");  
   }

   @Override  
   public boolean onContextItemSelected(MenuItem item) {  
       if(item.getTitle()=="Remove task from schedule") {createDeleteTaskAlert(item.getActionView());}  
       else {return false;}  
       return true;  
   }  

   private void createDeleteTaskAlert(View view){
       AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);
       alertDialog.setTitle("Delete Task");
       alertDialog.setMessage("Are you sure?");
       alertDialog.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int id) {

/**Code to target and delete original TextView View goes here**/

            }
       });
       alertDialog.setNegativeButton("No",new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int id) {
            }
       });
       alertDialog.create().show();

我为此模糊而道歉,但我尝试过的方法都没有能够在这里满足我的需要,而且我很感激任何意见。

3 个答案:

答案 0 :(得分:0)

您应该将删除的视图放在ViewGroup中,以便您可以管理它们,例如删除它们:

 ViewGroup.removeView(view);

答案 1 :(得分:0)

创建方法:

public void deleteView(int id) {
    View v = (View) holderView.findViewById(id);
    holderView.removeView(v);

}

其中holderView是保存视图的ViewGroup的任何内容(即包含用户可以选择的所有文本视图的任何内容)。

并在:

alertDialog.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int id) {

/**Code to target and delete original TextView View goes here**/
                 dialog.dismiss();
                 deleteView(id);
            }
       });

应该这样做。

那就是说 - 我个人认为这是一种非常麻烦的方式来做这种事情。如果你看看现代机器人,通常会将这种类型的功能分配给右/左滑动手势或长按。您可以考虑考虑这种方法。

答案 2 :(得分:0)

如果添加一个类成员变量来保存正在执行的TextView,则可以执行以下操作。仅显示相关位;添加的行已标记为注释。

将成员变量添加到类定义中:

private View theView = null;                                   // Line added

将该成员设置为打开其上下文菜单的TextView:

@Override  
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {  
     super.onCreateContextMenu(menu, v, menuInfo);
     theView = v;                                              // Line added
     menu.setHeaderTitle("Choose your Fate:");  
     menu.add(0, v.getId(), 0, "Remove task from schedule");  
}

删除:

private void createDeleteTaskAlert(final View view){
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);
    alertDialog.setTitle("Delete Task");
    alertDialog.setMessage("Are you sure?");

    alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog, int id) {
             ViewGroup vg = (ViewGroup) theView.getParent();   // Line added
             vg.removeView(theView);                           // Line added
         }
    });
    alertDialog.setNegativeButton("No",new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface dialog,int id) {
         }
    });
    alertDialog.create().show();
}

这假定视图具有父ViewGroup。大多数容器对象都是Viewgroups,但也许应该添加一个健全性检查(只是为了确保)。可能有一种方法可以将视图传递给调用堆栈,但是我会留下让其他人知道的。