2013-09-05 15 views
30

Ich entwickle eine Android-Anwendung.Ich habe eine Listview und ich habe ein Kontextmenü zu erscheinen, wenn ein Listview-Element lange gedrückt wird.Wie bekomme ich das Element aus der ListView-Element ausgewählt (Sagen Sie Text aus einer ListView Textansicht) nachdem eine Aktion aus dem Kontextmenu ausgewählt wurde, damit ich sie verarbeiten kann? Hier ist ein Code:Verwenden von contextmenu mit listview in android

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

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

} 

Und die 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); 
    } 
} 

Ich möchte Text aus einem Textview in einer Liste bekommen item.How kann ich das erreichen?

+0

So gibt es 2 Listenansichten, wobei 1 die Hauptliste und die anderen die 3 Elemente sind, die angezeigt werden, wenn Sie lange klicken. Ich sehe nicht, wo der lange Klick aufgerufen wird. – Zypps987

Antwort

63

sollten Sie die LISTVIEW für das Kontextmenü registrieren.

Hier ist die Quelle.

für onCreate():

registerForContextMenu(lv); 

Und während langer Klick die gewünschte Option aufzurufen:

@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 Ich bin wirklich dankbar für Ihre Hilfe. Sie wissen nicht, wie viel Sie mir geholfen haben. Ich schulde Ihnen viel Mann. Ich hatte echte Schwierigkeiten in diesem, nahm mich eine Woche, bevor es hier. Ich schätze es sehr .Vielen Dank. –

+0

Können Sie mir sagen, was ist das 'YourObject' hier? –

+0

@MohammadAreebSiddiqui Dies wäre Ihre eigene Implementierung eines Klassenobjekts für Ihre Daten. –

0

nutzen diese Methoden, onCreateContextMenu und 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

schreiben dies in Ihrem longPressListener mit der Listenansicht Sie verwenden:

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

Und Dies sind die Methoden:

@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

erste get Liste mit 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) Zuerst verwenden wir

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

2) Liste - ist ref wenn Listview

registerForContextMenu(list); 

3)

31

Um das Element aus dem ListView-Objekt ausgewählt beziehen Sie sich auf ContextMenuInfo Objekt (siehe zuletzt implementierte Methode unten).Vollständige Lösung wie folgt:

1) registrieren Listview für Kontextmenü in ListActivity Klasse

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

1a), wenn Sie Komplex Blick auf Ihrer Liste haben könnten Sie lange Klick auf jeder Listenansicht in Adapterklasse aktivieren müssen

@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) implementieren onCreateContextMenu() und onContextItemSelected() in ListActivity Klasse

@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

machen ** longclickable = true ** ist Lebensretter. Danke. – Fer