1

I'm using an AppCompatPreferenceActivity as my root class

Is it possible to add a context menu to a <preference>?

I managed to implement a long click listener on the preference following this answer.

I added registerForContextMenu(getListView()) in onPostCreate()

and I overrided the onCreateContextMenu() with my menu inflator.

SetingsActivity:

public class SettingsActivity extends AppCompatPreferenceActivity {
    private static ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setupActionBar();
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);

        listView = getListView();    
        registerForContextMenu(listView);
    }
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        menu.setHeaderTitle("Context Menu");
        inflater.inflate(R.menu.context_fingeprint_prints, menu);
        System.out.println("hey");
    }
}

LongClickPrefernce:

public abstract class LongClickPreference  extends Preference implements View.OnLongClickListener {
    private Context context;
    @Override
    protected View onCreateView(ViewGroup parent) {

        ListView listView = (ListView)parent;
        listView.setOnItemLongClickListener(new ListView.OnItemLongClickListener() {

            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                ListView listView = (ListView) parent;
                ListAdapter listAdapter = listView.getAdapter();
                Object obj = listAdapter.getItem(position);
                if (obj != null && obj instanceof View.OnLongClickListener) {
                    View.OnLongClickListener longListener = (View.OnLongClickListener) obj;
                    return longListener.onLongClick(view);
                }
                return false;
            }
        });

        return super.onCreateView(parent);
    }

    public LongClickPreference(Context context) {
        super(context);
        this.context = context;
    }

    @Override
    public abstract boolean onLongClick(View v);

}

Preference used:

LongClickPrefernce test = new LongClickPrefernce(getActivity()){
    @Override
    public boolean onLongClick(View v) {
        getActivity().openContextMenu((View)listView);
        return false;
    }
};
test.setTitle("test");

When I long click the preference, the onCreateContextMenu() gets called but nothing shows up

Any help is appreciated.

Community
  • 1
  • 1

0 Answers0