web-dev-qa-db-fra.com

Android: menu contextuel en un seul clic

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.

23
Adnan

appeler activity.openContextMenu(l) événement click unitaire pour ouvrir le menu contextuel en un seul clic et sur LongClick appeler activity.closeContextMenu()

Exemple

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;
    }
30
Sunil Kumar Sahoo

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.

31
Pawan Maheshwari

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).

14
sancho21

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);
        }
    });
5
jpmaster