我找不到适用于此的方法。
我在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();
我为此模糊而道歉,但我尝试过的方法都没有能够在这里满足我的需要,而且我很感激任何意见。
答案 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,但也许应该添加一个健全性检查(只是为了确保)。可能有一种方法可以将视图传递给调用堆栈,但是我会留下让其他人知道的。