2017-02-01 5 views
1

hier ist eine Liste der Ansprechpartner in ListView, ich möchte, wenn der Benutzer longClick auf irgendwelche Kontakte sollten ContextMenu Popup-Show „Call“ und „SMS senden“ i-Code für ContextMenu schreiben, aber mir noch zeigen ContextMenu nicht longClick auf Sie sagen, was ist fehlt in meinem Code. hier ist MainaAtivity KlasseWie ContextMenu lange auf Listenansicht Android anzeigen?

public class MainActivity extends AppCompatActivity { 

ListView listView; 
Button sync; 
ProgressDialog progressDialog; 
String name, phone; 

ArrayList<Contact_list> listitem; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 



    listitem = new ArrayList<Contact_list>(); 

    listView = (ListView) findViewById(R.id.listViewID); 
    registerForContextMenu(listView); 

    sync= (Button) findViewById(R.id.syncID); 
    sync.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      // GET CONTACTS DATA 


      GetContactsIntoArrayList(); 


      listView.setAdapter(new Custom_adapter(MainActivity.this, listitem)); 

      Toast.makeText(MainActivity.this, "import", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

public void GetContactsIntoArrayList(){ 
    Cursor cursor; 
    cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null, null, null); 

    while (cursor.moveToNext()) { 

     name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 

     phone = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 


     listitem.add(new Contact_list(name,phone)); 



     listView.setAdapter(new Custom_adapter(MainActivity.this, listitem)); 

    } 

    cursor.close(); 

    listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 

     public boolean onItemLongClick(AdapterView<?> arg0, View v, 
             int index, long arg3) { 
      // TODO Auto-generated method stub 

      Log.v("long clicked","pos: " + index); 


      //Log.d("tag", "message"); 
      String str=listView.getItemAtPosition(index).toString(); 

      Log.d("long click sucessfull: " ,str); 
      return true; 
     } 
    }); 

} 

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

     super.onCreateContextMenu(menu, v, menuInfo); 
     menu.setHeaderTitle("Select The Action"); 
     menu.add(0, v.getId(), 0, "Call"); 
     menu.add(0, v.getId(), 0, "Send SMS"); 

} 




@Override 
public boolean onContextItemSelected(MenuItem item) 
{ 


    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); 

    // info.position will give the index of selected item 
    int IndexSelected=info.position; 
    if(item.getTitle()=="Call") 
    { 

     // Code to execute when clicked on This Item 
    } 
    else if(item.getTitle()=="Send SMS") 
    { 

     // Code to execute when clicked on This Item 
     // 
                  } 
     else 
     { 
      return false; 
     } 
     return true; 


    } 


} 

Antwort

1

Remove Longpress-Methode aus dem Code nur hoffen, dass es

0

Versuchen aus den Zeilen zu tauschen:

@Override 
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    menu.setHeaderTitle("Select The Action"); 
    menu.add(0, v.getId(), 0, "Call"); 
    menu.add(0, v.getId(), 0, "Send SMS"); 
} 

An:

@Override 
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo) { 
    menu.setHeaderTitle("Select The Action"); 
    menu.add(0, v.getId(), 0, "Call"); 
    menu.add(0, v.getId(), 0, "Send SMS"); 
    super.onCreateContextMenu(menu, v, menuInfo); 
} 

aktualisieren

listView.setOnItemLongClickListener entfernen, weil Sie nicht verwenden können, ein longclicklistener und ein Kontextmenü gleichzeitig. Um ein Kontextmenü anzuzeigen, müssen Sie nur registerForContextMenu(listView) aufrufen, nachdem Sie Ihre Ansicht aufgebläht und onCreateContextMenu() für die Menüerstellung und onContextItemSelected() für die Benutzeraktion außer Kraft gesetzt haben.

+0

arbeiten immer noch nicht zeigt, nachdem swaping Linien @beeb –

+0

Bitte geben Sie die 'OnLongClickListener' entfernen. Sie können nicht beide gleichzeitig verwenden. – beeb

+0

Aber hier möchte ich ContextMenu auf longclick listner @beeb zeigen –

Verwandte Themen