Search code examples
androidonlongclicklistenerandroid-contextmenu

Context menu on Button long click?


How can I make my app to show Context menu on Long item Click? I have written this code and it's working. How can I make it so it shows when I click on some button?

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv"
        android:textColor="#04B404" />

Code:

TextView tv=(TextView)findViewById(R.id.tv);
tv.setOnCreateContextMenuListener(this);


@Override 
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuinfo) {
    super.onCreateContextMenu(menu, view, menuinfo);
    menu.setHeaderTitle("Set as");
    menu.add(menu.FIRST, Menu.NONE, 0, "Set as Wallpaper");
    menu.add(menu.FIRST+1, Menu.NONE, 0, "Download");
    menu.add(menu.FIRST+2, Menu.NONE, 0, "Info);

}

Solution

  • Try this Code:

    public class MainActivity extends ListActivity {  
    
      private String[] items;
      private List<String> list;
      private  ArrayAdapter<String> adapter;
      private int position;
      @Override  
      protected void onCreate(Bundle savedInstanceState) {  
           super.onCreate(savedInstanceState);  
           setContentView(R.layout.activity_main);  
           fillData();  
           registerForContextMenu(getListView());
      }  
      private void fillData() {  
           items = new String[] {"Monday", "Tuesday", "Wednesday",   
                            "Thursday", "Friday", "Saturday", "Sunday"};
           list = new ArrayList<String>();
           Collections.addAll(list, items);
           adapter = new ArrayAdapter<String>(this, R.layout.row,
           R.id.r_text, list);  
           setListAdapter(adapter);            
      }  
    
      @Override
      public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        // TODO Auto-generated method stub
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater m = getMenuInflater();
        m.inflate(R.menu.our_context_menu, menu);
      }
    
      @Override
      public boolean onContextItemSelected(MenuItem item) {
        switch(item.getItemId()){
            case R.id.delete_item:
                AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
                position = (int) info.id;
                list.remove(position);
                this.adapter.notifyDataSetChanged();
                return true;
      }
      return super.onContextItemSelected(item);
    }
    

    }

    Activity.xml file:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#000000"
            android:orientation="vertical" >
    
            <ListView
                android:id="@+id/android:list"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" />
    
    </LinearLayout> 
    

    row.xml:

    <?xml version="1.0" encoding="utf-8"?>  
    <TextView   
          xmlns:android="http://schemas.android.com/apk/res/android"  
          android:textIsSelectable="true"  
          android:id="@+id/r_text"   
          android:layout_width="fill_parent"  
          android:layout_height="fill_parent"  
          android:padding="10dip"  
          android:textColor="#ffffff"  
          android:textSize="17sp"/>  
    

    Now create a menu folder in res and put this file in it.

    Context Menu:

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android" >
        <item 
          android:id="@+id/delete_item"
          android:title="@string/delete_string"/>    
    </menu>