J'ai une intention qui étend une ListActivity. Dans ma méthode onCreate
après avoir rempli l'adaptateur de liste, j'utilise registerForContextMenu(getListView());
pour m'inscrire à un menu contextuel.
Maintenant, cela fonctionne et le menu contextuel a sa fonction d'origine qui est; une fois que je clique et maintiens sur un élément, le menu contextuel s'ouvre.
Puis-je ouvrir le menu contextuel en un seul clic (sans avoir à maintenir la liste enfoncée)?
Toute aide est appréciée.
appeler activity.openContextMenu(l)
événement click unitaire pour ouvrir le menu contextuel en un seul clic et sur LongClick appeler 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;
}
Voici une autre façon plus simple d'afficher le menu contextuel en un seul clic.
private void addOnClickListener()
{
contactList.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
view.showContextMenu();
}
})
}
remplacez contactList par votre ListView
et assurez-vous d'appeler cette méthode après l'initialisation de ListView
.
Je ne pense pas que cela fonctionne bien. L'appel de openContextMenu(l)
entraînera la nullité de item.getMenuInfo()
(dans la méthode onContextItemSelected(MenuItem item)
).
Vous devez appeler l.showContextMenuForChild(v)
au lieu de openContextMenu(l)
.
ce travail parfait ....
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);
}
});