1

私はxmlで定義されたリストビューを持っており、アダプターを介してそれを変更してデータを追加します..リストをシングルクリックしてコンテキストメニューを表示したいのですが、これはすでに行っています..しかし、クリックされたリストの位置を取得するにはどうすればよいですか?

コードは次のとおりです。これは、コンテキストメニューを呼び出す方法です。

list = (ListView)findViewById(R.id.grant_list);

    // get all data in database
    List<GrantListData> dataList = con.getAllList();  
    try {
        list.removeAllViews();
    } catch (Exception e) {}

    listAll.clear();
    arrName.clear();
    arrPhone.clear();
    for (int i = 0; i < dataList.size(); ++i) {
          listAll.add(dataList.get(i));
          arrName.add(dataList.get(i).getName().toString());
          arrPhone.add(dataList.get(i).getPhone().toString());
    }

    adapter = new StableArrayAdapter(this,android.R.layout.simple_list_item_1, arrName);
    list.setAdapter(adapter);

    this.registerForContextMenu(list);
    list.setOnLongClickListener(this);

    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
            String item = (String)parent.getItemAtPosition(pos);
            activity.registerForContextMenu(view);
            activity.openContextMenu(view);
        }
    });

これは onCreateContextMenu メソッドです:

int num=-1;
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    AdapterContextMenuInfo Info = (AdapterContextMenuInfo) menuInfo;
      //String clicked = adapter.getItem(Info.position); --> this is when I get confused
      //num = Info.position;
      //menu.setHeaderTitle("Options for " + clicked);
      menu.add(1, 1, 1, "Details");
      //menu.addSubMenu(1, 1, 1, arrName.get(Info.position));
      //menu.addSubMenu(1, 1, 2, arrPhone.get(Info.position));
      menu.add(1, 2, 2, "Delete");
}

[添加]

private class StableArrayAdapter extends ArrayAdapter<String> {

    HashMap<String, Integer> mIdMap = new HashMap<String, Integer>();

    public StableArrayAdapter(Context context, int textViewResourceId,
        List<String> objects) {
      super(context, textViewResourceId, objects);
      for (int i = 0; i < objects.size(); ++i) {
        mIdMap.put(objects.get(i), i);
      }
    }

    @Override
    public long getItemId(int position) {
      String item = getItem(position);
      return mIdMap.get(item);
    }

    @Override
    public boolean hasStableIds() {
      return true;
    }

  }

前もって感謝します :)

[解決済み] うーん、単純なことに気付くのに時間がかかりました。私が意味するのはこれです

list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
            currList = (String)parent.getItemAtPosition(pos);
            currIndex = pos;

            registerForContextMenu(view);
            openContextMenu(view);
        }
    });

この

int num=-1;
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    AdapterContextMenuInfo Info = (AdapterContextMenuInfo) menuInfo;
      menu.setHeaderTitle("Options for "+ currList);
      menu.add(1, 1, 1, "Details");
      menu.addSubMenu(1, 1, 1, arrName.get(currIndex));
      menu.addSubMenu(1, 1, 2, arrPhone.get(currIndex));
      menu.add(1, 2, 2, "Delete");
}

答えてくれてありがとう:)

4

2 に答える 2

0

これを試してください:

 ((ListView) findViewById(R.id.lisview)).setOnItemClickListener(new OnItemClickListener(){

                    public void onItemClick(AdapterView<?> arg0, View arg1, final int arg2,
                            long arg3) {
                        // TODO Auto-generated method stub
                        /*"Toast the int which is arg2 to show the position of listview that has been clicked"*/


                    }

                });


Using Context menu:

    public void onCreateContextMenu(ContextMenu menu, View v,
                    ContextMenuInfo menuInfo) {
                super.onCreateContextMenu(menu, v, menuInfo);
                menu.setHeaderTitle("Do you want to add?");

                MenuItem chix = menu.add("Add Chicken");
                MenuItem pasta = menu.add("Add Pasta");
                MenuItem drinks = menu.add("Add Drinks");
                MenuItem con = menu.add("Continue");
                chix.setOnMenuItemClickListener(new OnMenuItemClickListener() {

                    public boolean onMenuItemClick(MenuItem item) {
                        // TODO Auto-generated method stub
                        //your codes here//

                        return true;
                    }
                });

                pasta.setOnMenuItemClickListener(new OnMenuItemClickListener() {

                    public boolean onMenuItemClick(MenuItem item) {
                        // TODO Auto-generated method stub
                        //your codes here//
                        return true;
                    }
                });

                drinks.setOnMenuItemClickListener(new OnMenuItemClickListener() {

                    public boolean onMenuItemClick(MenuItem item) {
                        // TODO Auto-generated method stub
                        //your codes here//
                        return true;
                    }
                });

                con.setOnMenuItemClickListener(new OnMenuItemClickListener() {

                    public boolean onMenuItemClick(MenuItem item) {
                        // TODO Auto-generated method stub
                        //your codes here//
                        return true;
                    }
                });
                }
于 2013-05-15T03:02:10.903 に答える