Как переопределить LongPress в ListFragment? - PullRequest
6 голосов
/ 14 сентября 2011

У меня есть ListFragment Activity.

Я хочу создать метод для onItemClickedLongPress, чтобы, когда пользователь делает это.меню всплывает.Я знаком с созданием меню.

Так что, если кто-нибудь пожелает, дайте мне дальнейшие инструкции о том, как установить Переопределение длинного нажатия в действии ListFragment?

Ответы [ 4 ]

8 голосов
/ 14 сентября 2011

edit: этот пример показывает, как показать что-то другое, кроме системного меню fx.QuickAction от https://github.com/lorensiuswlt/NewQuickAction

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    //.......
    registerForContextMenu(getListView());
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    AdapterView.AdapterContextMenuInfo amenuInfo = (AdapterView.AdapterContextMenuInfo) menuInfo;
    Object item = getListAdapter().getItem(amenuInfo.position);
    //item could be Cursor/String/YourObject it depends on Adapter
    //show popup fx. QuickAction from https://github.com/lorensiuswlt/NewQuickAction
    QuickAction qa = new QuickAction(getActivity());
    qa.setAnimStyle(QuickAction.ANIM_AUTO);
    qa.show(amenuInfo.targetView);
}

РЕДАКТИРОВАТЬ: Этот ответ не подходит ... почему я сделал этот такой странный метод?потому что Eclipse Intellisense не выдал «хороший» setOnLongClickListener для ListView (поскольку ListView имеет как минимум 2 setOnLongClickListener методов ... один из View и второй из AdapterView класса) ... самый простойпусть ваш ListFragment реализует AdapterView.OnItemLongClickListener, а затем в onViewCreated добавит код getListView().setOnLongClickListener(this);

5 голосов
/ 14 сентября 2011

Под "долгим нажатием", я думаю, вы обращаетесь к контекстному меню.Для ListFragment все, что вам нужно сделать, это зарегистрироваться в контекстном меню:

@Override
public void onActivityCreated(Bundle icicle) {    
    registerForContextMenu(getListView());
}

После того, как вы это сделаете, ListFragment должен вызвать onCreateContextMenu() и onContextItemSelected(), когда обнаружитдолгое нажатие.

0 голосов
/ 15 июля 2014
getListView().setOnItemLongClickListener(new OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        // Show your popout menu here.
    }
});
0 голосов
/ 26 августа 2013

Модифицированный ответ Эриха Дугласа далее ... по какой-то причине мое собственное приложение зависало, пока я не изменил свой код и не поместил регистрацию в onViewCreated следующим образом:

@Override
public void onViewCreated (View view, Bundle savedInstanceState) {
    registerForContextMenu(getListView());
}
...