2013-09-05 5 views
30

Je développe une application android.J'aurai un listview et j'ai mis un menu contextuel pour apparaître quand un élément listview est pressé de façon longue .Comment puis-je obtenir l'élément de l'élément listview sélectionné (dire le texte d'un textview de vue de liste) après qu'une action du menu de contexte est choisie ainsi je peux le traiter? Voici un code:Utiliser le menu contextuel avec listview dans android

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

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

} 

Et le 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); 
    } 
} 

Je veux obtenir le texte d'un textview dans une liste item.How-je y parvenir?

+0

Il y a donc 2 vues de liste, 1 étant la liste principale et l'autre étant les 3 éléments qui apparaissent lorsque vous cliquez longuement. Je ne vois pas où le long clic est appelé. – Zypps987

Répondre

63

vous devez enregistrer le LISTVIEW pour le menu contextuel.

Voici la source.

pour onCreate():

registerForContextMenu(lv); 

Et pour accéder à l'élément sélectionné pendant un long clic:

@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 Je suis vraiment reconnaissant pour votre aide.Vous ne savez pas combien vous m'avez aidé.Je vous dois beaucoup d'homme.J'ai eu de réels problèmes dans celui-ci, m'a pris une semaine avant de l'afficher ici.Je l'apprécie beaucoup .Merci. –

+0

Pouvez-vous me dire quel est le 'YourObject' ici? –

+0

@MohammadAreebSiddiqui ceci serait votre propre implémentation d'un objet de classe pour contenir vos données. –

0

utiliser ces méthodes, onCreateContextMenu et 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

écrire dans votre longPressListener avec le listview que vous utilisez:

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

Et ce sont les méthodes:

@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

première liste get utilisant 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) Tout d'abord, nous utilisons

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

2) liste - est ref si 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

Pour obtenir l'élément de l'élément ListView sélectionné , reportez-vous à l'objet ContextMenuInfo (voir la dernière méthode implémentée ci-dessous).Solution complète comme suit:

1) registre ListView pour le menu contextuel en classe ListActivity

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

1a) si vous avez complexe Vue sur votre liste, vous devrez peut-être permettre à long cliquez sur chaque affichage de la liste en classe Adaptateur

@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) mettre en œuvre onCreateContextMenu() et onContextItemSelected() dans la classe de ListActivity

@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

make ** longclickable = true ** est sauveur de vie. Merci. – Fer

Questions connexes