如何在android中选择的上下文项中获得位置?

时间:2012-06-19 04:48:32

标签: android position android-context selected

setListAdapter(new ArrayAdapter<String>(this,R.layout.custom_list_item, r));

protected void onListItemClick(ListView list, View view, int position, long id) {
                super.onListItemClick(list, view, position, id);

                    fname=r.get(position);

上面的代码我从阵列适配器

获得了位置和名称

喜欢,我需要得到这些都是上下文菜单中的值我怎么能得到它

 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.setHeaderTitle("Playlist Option");
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.context_menu, menu);    

    }   

 public boolean onContextItemSelected(MenuItem item) {

// here I select the particular list value, that the value position I need that is only I delete that position from server. what are the data i fetch here? and its possible to get position from array list? 
}           

2 个答案:

答案 0 :(得分:2)

您可以使用AdapterContextMenuInfo

public boolean onContextItemSelected(MenuItem item) {
     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();

     switch (item.getItemId()) {
        case R.id.delete:
            String itemName = r.get[(int) info.id]; // This item you will delete
                                                    // from list
            return true;


        }
    }

答案 1 :(得分:1)

public class DataDemo extends Activity {

    public ArrayList<HashMap<String, String>> ContactList = new ArrayList<HashMap<String, String>>();

    private static final String TAG_ID = "id";
    private static final String TAG_NAME = "name";
    private static final String TAG_PHNO = "phNo";

    private static int itemIndex;
    private ListView lst;
    private List<Contact> contacts;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_database_demo);
        lst = (ListView) findViewById(R.id.lstContact);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        // TODO Auto-generated method stub
        super.onCreateContextMenu(menu, v, menuInfo);
        if (v.getId() == R.id.lstContact) {
            menu.setHeaderIcon(R.drawable.message);
            menu.setHeaderTitle("Contacts");
            menu.add(0, 1, Menu.NONE, "Edit Contact");
            menu.add(0, 2, Menu.NONE, "Delete Contact");
            menu.add(0, 3, Menu.NONE, "Cancel");
        }

    }
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        AdapterView.AdapterContextMenuInfo menuInfo;//you can select on context item selected
        menuInfo = (AdapterContextMenuInfo) item.getMenuInfo();
        itemIndex = menuInfo.position;//you will get position of selected item
        final Contact con = contacts.get(itemIndex);

        switch (item.getItemId()) {
        case 1:

            Intent editIntent = new Intent(DataDemo.this, UpdateContact.class);
            editIntent.putExtra(TAG_ID, con.getID());
            editIntent.putExtra(TAG_NAME, con.getName());
            editIntent.putExtra(TAG_PHNO, con.getPhNo());
            startActivity(editIntent);
            break;
        case 2:
            new AlertDialog.Builder(this)
                    .setIcon(R.drawable.document_delete)
                    .setTitle("Confirm Delete")
                    .setMessage("Are you sure?")
                    .setPositiveButton("Yes",
                            new DialogInterface.OnClickListener() {

                                public void onClick(DialogInterface dialog,
                                        int which) {
                                    // TODO Auto-generated method stub
                                    DatabaseHandler db = new DatabaseHandler(
                                            DataDemo.this);
                                    db.DeleteContact(con);
                                    Toast.makeText(DataDemo.this, con.getName() + " Deleted",
                                            Toast.LENGTH_SHORT).show();
                                    fillList();
                                }
                            }).setNegativeButton("No", null).show();

            break;
        default:
            break;
        }
        return super.onContextItemSelected(item);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuItem addNew = menu.add(0, 1, 0, "Create Contact");

        addNew.setOnMenuItemClickListener(new OnMenuItemClickListener() {

            public boolean onMenuItemClick(MenuItem item) {
                // TODO Auto-generated method stub
                Intent iCreate = new Intent(DataDemo.this, CreateContact.class);
                startActivity(iCreate);
                return true;
            }
        });
        return true;
    }

    protected void fillList() {
        DatabaseHandler db = new DatabaseHandler(this);
        ListAdapter adap;
        ContactList.clear();
        contacts = db.ReadAllContact();

        for (Contact cn : contacts) {
            HashMap<String, String> hmap = new HashMap<String, String>();
            hmap.put(TAG_NAME, cn.getName());
            hmap.put(TAG_PHNO, cn.getPhNo());
            ContactList.add(hmap);
            adap = new SimpleAdapter(this, ContactList,
                    R.layout.list_item_view,
                    new String[] { TAG_NAME, TAG_PHNO }, new int[] {
                            R.id.lstName, R.id.lstPhNo });


            lst.setAdapter(adap);
            registerForContextMenu(lst);
        }
    }


    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        fillList();
    }

}