私はxmlで定義されたリストビューを持っており、アダプターを介してそれを変更してデータを追加します..リストをシングルクリックしてコンテキストメニューを表示したいのですが、これはすでに行っています..しかし、クリックされたリストの位置を取得するにはどうすればよいですか?
コードは次のとおりです。これは、コンテキストメニューを呼び出す方法です。
list = (ListView)findViewById(R.id.grant_list);
// get all data in database
List<GrantListData> dataList = con.getAllList();
try {
list.removeAllViews();
} catch (Exception e) {}
listAll.clear();
arrName.clear();
arrPhone.clear();
for (int i = 0; i < dataList.size(); ++i) {
listAll.add(dataList.get(i));
arrName.add(dataList.get(i).getName().toString());
arrPhone.add(dataList.get(i).getPhone().toString());
}
adapter = new StableArrayAdapter(this,android.R.layout.simple_list_item_1, arrName);
list.setAdapter(adapter);
this.registerForContextMenu(list);
list.setOnLongClickListener(this);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
String item = (String)parent.getItemAtPosition(pos);
activity.registerForContextMenu(view);
activity.openContextMenu(view);
}
});
これは onCreateContextMenu メソッドです:
int num=-1;
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
AdapterContextMenuInfo Info = (AdapterContextMenuInfo) menuInfo;
//String clicked = adapter.getItem(Info.position); --> this is when I get confused
//num = Info.position;
//menu.setHeaderTitle("Options for " + clicked);
menu.add(1, 1, 1, "Details");
//menu.addSubMenu(1, 1, 1, arrName.get(Info.position));
//menu.addSubMenu(1, 1, 2, arrPhone.get(Info.position));
menu.add(1, 2, 2, "Delete");
}
[添加]
private class StableArrayAdapter extends ArrayAdapter<String> {
HashMap<String, Integer> mIdMap = new HashMap<String, Integer>();
public StableArrayAdapter(Context context, int textViewResourceId,
List<String> objects) {
super(context, textViewResourceId, objects);
for (int i = 0; i < objects.size(); ++i) {
mIdMap.put(objects.get(i), i);
}
}
@Override
public long getItemId(int position) {
String item = getItem(position);
return mIdMap.get(item);
}
@Override
public boolean hasStableIds() {
return true;
}
}
前もって感謝します :)
[解決済み] うーん、単純なことに気付くのに時間がかかりました。私が意味するのはこれです
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
currList = (String)parent.getItemAtPosition(pos);
currIndex = pos;
registerForContextMenu(view);
openContextMenu(view);
}
});
この
int num=-1;
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
AdapterContextMenuInfo Info = (AdapterContextMenuInfo) menuInfo;
menu.setHeaderTitle("Options for "+ currList);
menu.add(1, 1, 1, "Details");
menu.addSubMenu(1, 1, 1, arrName.get(currIndex));
menu.addSubMenu(1, 1, 2, arrPhone.get(currIndex));
menu.add(1, 2, 2, "Delete");
}
答えてくれてありがとう:)