我编写了以下代码来ContextMenu
在 android 中编写简单的示例。在此示例中,我尝试了edit
选项delete
。但问题是我找不到要编辑的正确行。例如:如果我长按第 5 行的edit
菜单,Layout
则在第 n 行中可见。我不知道有什么问题。我也不知道如何实现这一点。我试过这种方式。
public class ContextMenuActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contextmenu);
initComponents();
setActionListener();
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Options");
menu.add(0, v.getId(), 0, "Edit");
menu.add(0, v.getId(), 0, "Delete");
}
LinearLayout mLinearLayout;
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
.getMenuInfo();
// info.position will give the index of selected item
int IndexSelected = info.position;
if (item.getTitle() == "Edit") {
View v1 = list.getAdapter().getView(IndexSelected, list, null);
mLinearLayout = (LinearLayout) v1.findViewById(R.id.myLinearLayout);
mLinearLayout.setVisibility(View.VISIBLE);
tv = (TextView) v1.findViewById(R.id.listitem_txt_item);
Button b = (Button) v1.findViewById(R.id.myButton3);
final EditText et = (EditText) v1.findViewById(R.id.myEditText3);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
tv.setText(et.getText().toString());
mLinearLayout.setVisibility(View.GONE);
}
});
Toast.makeText(getApplicationContext(), "Hi edit " + IndexSelected,
Toast.LENGTH_LONG).show();
// Code to execute when clicked on This Item
} else if (item.getTitle() == "Delete") {
Toast.makeText(getApplicationContext(), "Hi delete ",
Toast.LENGTH_LONG).show();
// alistItems.remove(adapter.getItem(IndexSelected));
} else {
return false;
}
return true;
}
private void initComponents() {
inflater = ContextMenuActivity.this.getLayoutInflater();
list = (ListView) findViewById(R.id.contextmenu_lst_list);
tv = (TextView) findViewById(R.id.listitem_txt_item);
mLinearLayout = (LinearLayout) findViewById(R.id.myLinearLayout);
alistItems = new ArrayList<String>();
for (loopCount = 1; loopCount < 30; loopCount++) {
alistItems.add("Item " + loopCount);
}
prepareView();
}
CustomAdapter adapter;
LayoutInflater inflater;
ListView list;
TextView tv;
ArrayList<String> alistItems;
int loopCount;
private void prepareView() {
adapter = new CustomAdapter(getApplicationContext(), R.layout.listitem,
alistItems);
list.setAdapter(adapter);
registerForContextMenu(list);
}
private void setActionListener() {
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
}
});
}
public class CustomAdapter extends ArrayAdapter<String> {
ArrayList<String> alistItems;
int resource;
public CustomAdapter(Context context, int resource,
ArrayList<String> alistItems) {
super(context, resource);
this.alistItems = alistItems;
this.resource = resource;
}
@Override
public int getCount() {
return alistItems.size();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Holder holder = new Holder();
if (convertView == null) {
convertView = inflater
.inflate(R.layout.listitem, parent, false);
}
holder.tvRow = (TextView) convertView
.findViewById(R.id.listitem_txt_item);
convertView.setTag(holder);
holder = (Holder) convertView.getTag();
holder.tvRow.setText(alistItems.get(position));
return convertView;
}
}
class Holder {
TextView tvRow;
}
}