2013-09-05 19 views
30

私はアンドロイドアプリケーションを開発しています。私はリストビューを持ち、リストビューアイテムがlong -pressedであるときに表示されるコンテキストメニューを設定しました。リストビューアイテムからアイテムを取得する方法は? (私はそれを処理することができるようにcontextmenuからのアクションが選択された後、リストビューのテキストビューからのテキストを言う)?androidのlistviewでcontextmenuを使用する

protected void onCreate(Bundle savedInstanceState) { 
    ------- 
    lv1 = (ListView) findViewById(R.id.listings); 

    registerForContextMenu(lv1); 
    lv1.setOnItemClickListener(this); 

} 

そしてonCreateContextMenu:ここに はいくつかのコードである

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

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item 
      .getMenuInfo(); 
    switch (item.getItemId()) { 
    case R.id.watch: 
     String name = ""; 
     return true; 
    case R.id.buy: 
     return true; 
    default: 
     return super.onContextItemSelected(item); 
    } 
} 

私は私がそれを達成んitem.Howリスト中のTextViewからテキストを取得したいですか?

+0

2つのリストビューがあります.1つはメインリストで、もう1つは長いをクリックすると表示される3つのアイテムです。長いクリックがどこに呼び出されているのか分かりません。 – Zypps987

答えて

63

あなたは、コンテキストメニューのLISTVIEWを登録する必要があります。

ここにソースがあります。 onCreate()ため

registerForContextMenu(lv); 

と長いクリック時に選択した項目にアクセスするには:

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 
    if (v.getId() == R.id.lv) { 
     ListView lv = (ListView) v; 
     AdapterView.AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) menuInfo; 
     YourObject obj = (YourObject) lv.getItemAtPosition(acmi.position); 

     menu.add("One"); 
     menu.add("Two"); 
     menu.add("Three"); 
     menu.add(obj.name); 
    } 
} 
+14

Piyush Gupta私は本当にあなたの援助に感謝しています。あなたが私を助けてくれたことは分かりません。あなたにたくさんの人がいます。私は本当にこの問題を抱えていました。ここに投稿する前に1週間かかりました。ありがとう。 –

+0

'YourObject'は何ですか? –

+0

@MohammadAreebSiddiquiこれは、データを保持するクラスオブジェクトの独自の実装です。 –

0

使用これらの方法で、onCreateContextMenuとonContextItemSelected \

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
     ContextMenuInfo menuInfo) { 
    if (v.getId() == R.id.listview) { 
     menu.setHeaderTitle("Delete"); 
     menu.add(Menu.NONE, 0, 0, "Delete from list"); 
    } 
} 

/** 
* Responding to context menu selected option 
* */ 

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item 
      .getMenuInfo(); 
    int menuItemIndex = item.getItemId(); 
    // check for selected option 
    if (menuItemIndex == 0) { 
     // user selected delete 
     // delete the listrow 
     ..(in your onitemclicklistener there is a parameter called as'postition' use this position and use some method to delete the data corresponding to the position value) 
     // reloading same activity again 
     Intent intent = getIntent(); 
     finish(); 
     startActivity(intent); 
    } 

    return true; 
} 
0

は、使用するリストビューを使用してlongPressListenerでこれを書く:

ListView list = (ListView) findViewById(android.R.id.list); 
registerForContextMenu(list); 

そして、これはメソッドです:

@Override 
    public void onCreateContextMenu(ContextMenu menu, View v, 
     ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 

    AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; 
    Adapter adapter = getListAdapter(); 
    Object item = adapter.getItem(info.position); 



    menu.setHeaderTitle("Choose"); 
    menu.add(0, v.getId(), 0, "Delete"); 

} 


@Override 
public boolean onContextItemSelected(MenuItem item) { 

    if (item.getTitle() == "Delete") { 
     deleteContact(item.getItemId()); 
    } else if (...) { 
     // code 
    } else { 
     return false; 
    } 
    return true; 

} 

public void deleteContact(int id){ 

// your code what to do for the clicked item 
    } 
1

最初のgetリストID

Context context = getApplicationContext(); 
ComponentName component = new ComponentName(context.getPackageName(), TestReplaceHomeAppActivity.class.getName()); 

String packname = context.getPackageName(); 

Intent LaunchIntent = getActivity().getPackageManager().getLaunchIntentForPackage(packageName); 
if(LaunchIntent != null){ 
    startActivity(LaunchIntent); 
} 
else { 
    Toast.makeText(getActivity().getBaseContext(),"APPLICATION IN NOT AVAILABEL", Toast.LENGTH_SHORT).show(); 
} 
2

1)まず我々が使用を使用して

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    menu.add("View Selected Text"); 
} 

2) リスト - あるREFのListView

registerForContextMenu(list); 

3)

場合
@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 

    if(item.getTitle().equals("View Selected Text")) 
    { 
     AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo(); 
     Contact c=array.get(menuInfo.position); 
     Toast.makeText(List.this, "Selected String is :-"+c.toString(), Toast.LENGTH_SHORT).show(); 
    } 
} 
31

選択したListViewアイテムから項目を取得するには、をContextMenuInfoオブジェクト(以下の最後に実装されたメソッドを参照)を参照してください。完全な解決策を次のように

1)あなたがあなたのリスト上の複雑なビューを持っている場合は、アダプタクラスの各リストビュー上で長いクリックを有効にする必要がありますListActivityクラス

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // ... 
    getListView().setAdapter(mAdapter); 
    registerForContextMenu(getListView()); 
} 

1A)でコンテキストメニューのためのリストビューを登録します

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view = convertView; 
    if (view == null) { 
     RelativeLayout layout = (RelativeLayout) LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false); 
     itemLayout = layout; 
     itemLayout.setLongClickable(true); 
    } 
    // ... 
    return view; 
} 

2)ListActivityクラスでonCreateContextMenu()とonContextItemSelected()を実装

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; 
    String title = ((MyItem) mAdapter.getItem(info.position)).getTitle(); 
    menu.setHeaderTitle(title); 

    menu.add(Menu.NONE, MENU_CONTEXT_DELETE_ID, Menu.NONE, DELETE_TEXT); 
} 

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case MENU_CONTEXT_DELETE_ID: 
     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
     Log.d(TAG, "removing item pos=" + info.position); 
     mAdapter.remove(info.position); 
     return true; 
    default: 
     return super.onContextItemSelected(item); 
    } 
} 
+2

** longclickable = true **は命を救う人です。 〜 – Fer