0

I have code like this :

public class ListConActivity extends Activity {

    private String[] Distro = { "Ubuntu", "Arch Linux", "Mandriva",
            "Open Suse", "IGOS Nusantara", "Linux Mint", "Debian", "Fedora",
            "CrunchBang", "Backtrack", "Puppy Linux", "OpenBSD", "Slackware",
            "BlankOn", "CentOS" };
    private String[] pilihan_menu = { "Tambah Data", "Edit Data", "Hapus Data",
            "Kirim Data" };

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Arrays.sort(Distro);

        ListView list = (ListView) findViewById(R.id.list);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, Distro);
        list.setAdapter(adapter);
        registerForContextMenu(list);
    }

    public void onCreateContextMenu(ContextMenu menu, View tampil,
            ContextMenuInfo menuInfo) {
        if (tampil.getId() == R.id.list) {
            AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
            menu.setHeaderTitle(Distro[info.position]);
            for (int i = 0; i < pilihan_menu.length; i++) {
                menu.add(Menu.NONE, i, i, pilihan_menu[i]);
            }
        }
    }

    public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
                .getMenuInfo();
        String aksi = pilihan_menu[item.getItemId()];
        String nama_pilihan = Distro[info.position];
        String isi = String.format("Anda melakukan operasi %s pada pilihan %s",
                aksi, nama_pilihan);

        Toast.makeText(this, isi, Toast.LENGTH_LONG).show();
        return true;
    }
}

Its work perfectly showing contextmenu for long click. I changed the code to implement the onclick to be able to open a context menu with a short click.

public class ListConActivity extends Activity implements OnClickListener {

    private String[] Distro = { "Ubuntu", "Arch Linux", "Mandriva",
            "Open Suse", "IGOS Nusantara", "Linux Mint", "Debian", "Fedora",
            "CrunchBang", "Backtrack", "Puppy Linux", "OpenBSD", "Slackware",
            "BlankOn", "CentOS" };
    private String[] pilihan_menu = { "Tambah Data", "Edit Data", "Hapus Data",
            "Kirim Data" };

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Arrays.sort(Distro);

        ListView list = (ListView) findViewById(R.id.list);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, Distro);
        list.setAdapter(adapter);
        registerForContextMenu(list);
        list.setOnClickListener(this);

    }

    public void onCreateContextMenu(ContextMenu menu, View tampil,
            ContextMenuInfo menuInfo) {
        if (tampil.getId() == R.id.list) {
            AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
            menu.setHeaderTitle(Distro[info.position]);
            for (int i = 0; i < pilihan_menu.length; i++) {
                menu.add(Menu.NONE, i, i, pilihan_menu[i]);
            }
        }
    }

    public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
                .getMenuInfo();
        String aksi = pilihan_menu[item.getItemId()];
        String nama_pilihan = Distro[info.position];
        String isi = String.format("Anda melakukan operasi %s pada pilihan %s",
                aksi, nama_pilihan);

        Toast.makeText(this, isi, Toast.LENGTH_LONG).show();
        return true;
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        openContextMenu(v);
    }
}

Compile success.. But i get force close. Can u help me? thanks dude!

Arief Rivai
  • 228
  • 6
  • 19

2 Answers2

0

You have set click listener for ListView, not list items. Use setOnItemClickListener and AdapterView.OnItemClickListener

Sergey Glotov
  • 20,200
  • 11
  • 84
  • 98
0

yeaH: do a setOnItemClickListener for listView & in that click method call openContextMenu(view) from Activity class

pulancheck1988
  • 2,024
  • 3
  • 28
  • 46