ListActivityを拡張するインテントがあります。リストアダプターにデータを入力した後のonCreate
メソッドでは、registerForContextMenu(getListView());
を使用してコンテキストメニューに登録します。
現在は機能しており、コンテキストメニューには元の機能があります。アイテムをクリックして押し続けると、コンテキストメニューが開きます。
(リストを押したままにせずに)ワンクリックでコンテキストメニューを開くことはできますか?
すべての助けに感謝します。
activity.openContextMenu(l)
onitem clickイベントを呼び出して、シングルクリックでコンテキストメニューを開き、onLongClickを呼び出しますactivity.closeContextMenu()
import Android.app.Activity;
import Android.app.ListActivity;
import Android.content.res.Configuration;
import Android.os.Bundle;
import Android.view.ContextMenu;
import Android.view.ContextMenu.ContextMenuInfo;
import Android.view.View;
import Android.widget.AdapterView;
import Android.widget.AdapterView.OnItemLongClickListener;
import Android.widget.ArrayAdapter;
import Android.widget.ListView;
public class MyListView extends ListActivity implements OnItemLongClickListener {
/** Called when the activity is first created. */
Activity activity = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activity = this;
ArrayAdapter arrayAdapter = new ArrayAdapter<String>(this,
Android.R.layout.simple_list_item_1, PENS);
setListAdapter(arrayAdapter);
getListView().setTextFilterEnabled(true);
ListView lv = getListView();
this.registerForContextMenu(lv);
lv.setOnItemLongClickListener(this);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
System.out.println("...11configuration is changed...");
}
static final String[] PENS = new String[]{
"MONT Blanc",
"Gucci",
"Parker",
"Sailor",
"Porsche Design",
"item1",
"item2",
"item3",
"item4",
"item5",
"item6",
"item7",
"item8",
"item9",
"item10",
"item11"
};
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
activity.openContextMenu(l);
System.out.println("...context is called");
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
System.out.println("...on create context menu...");
super.onCreateContextMenu(menu, v, menuInfo);
}
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
System.out.println("...on long click close context menu...");
activity.closeContextMenu();
// TODO Auto-generated method stub
return false;
}
シングルクリックでコンテキストメニューを表示する別の簡単な方法を次に示します。
private void addOnClickListener()
{
contactList.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
view.showContextMenu();
}
})
}
contactListをListView
に置き換え、ListView
の初期化後にこのメソッドを必ず呼び出してください。
スムーズに動いていないと思います。 openContextMenu(l)
を呼び出すと、item.getMenuInfo()
がnullになります(メソッドonContextItemSelected(MenuItem item)
内)。
l.showContextMenuForChild(v)
の代わりにopenContextMenu(l)
を呼び出す必要があります。
この作品は完璧...
listmp3 = (ListView) findViewById(R.id.results_mp3);
registerForContextMenu(listmp3);
listmp3.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
listmp3.showContextMenuForChild(view);
}
});