2015-07-24 2 views
0

В моей текущей структуре используется navDrawer со списком элементов в нем, указывающим на основной фрагмент, содержащий RecyclerView, содержащий CardView. Когда я настраиваю ListView для передачи его в registerForContextMenu, приложение терпит крах, давая ошибку, инициализируя объект нулевым значением.Android: Инициализация объекта ListView Ошибка при создании контекстного меню

Код, который я использую для объявления элемента ListView для передачи.

ListView LV = (ListView) findViewById(R.id.cv); 

где «cv» - это идентификатор элемента CardView, который содержит данные для отображения.

registerForContextMenu(LV); 

На данный момент конкретная ошибка приходит:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setOnCreateContextMenuListener(android.view.View$OnCreateContextMenuListener)' on a null object reference 

значение LV приближается к нулевой. Я новичок в android, я пропускаю что-то в объявлении или пока я использую приведение в ListView? Можно ли использовать Long Click в CardView или нет?

ответ

0

Вы имеете в виду неправильный идентификатор с вашим списком. Когда вы инициализируете просмотр списка, вам нужно плавники, используя его id.It то же самое со всеми другими представлениями.

В этом случае вы передаете идентификатор вашей карты в свой объект listview, который является неправильным.cv должен быть идентификатором вашего списка, а не видом карты.

Это должно быть что-то вроде

ListView LV = (ListView) findViewById(R.id.ypur_list_view_id_in_xml); 
+0

Могу ли я передать объект CardView для registerForContextMenu(), потому что я хочу показать контекстное меню при длинном нажатии на CardView? –

+0

Я понятия не имею о контекстном меню, но я считаю, что вы можете долго нажимать, используя свой карточный список в списке. Потому что длинное нажатие будет находиться в одной строке вашего списка, а не на карте. –

+0

Я расскажу вам всю структуру, макет ящика содержит FrameLayout (основной дисплей) и ListView (часть меню влево), в FrameLayout у меня есть RecyclerView, внутри которого у меня есть CardView, который имеет фактические данные при нажатии который я хочу, чтобы контекстный вид появлялся, теперь скажите мне, что мне следует передать cardView или List. Если тогда какой взгляд следует включить в список? –

0

я узнал один из возможных вариантов решения этой проблемы. В RecyclerViewAdapter, где вы создаете структуру для компонентов, которые будут появляться на экране, сделать один класс

public static class CompareViewHolder extends RecyclerView.ViewHolder implements RecyclerView.OnCreateContextMenuListener { 
    CardView cv; 
    TextView itemid; 
    TextView baseline; 
    TextView current; 

    CompareViewHolder(View itemView) { 
     super(itemView); 
     cv = (CardView) itemView.findViewById(R.id.cv); 
     itemid = (TextView) itemView.findViewById(R.id.itemid); 
     baseline = (TextView) itemView.findViewById(R.id.baseline); 
     current = (TextView) itemView.findViewById(R.id.current); 
     itemView.setOnCreateContextMenuListener(this); 
    } 

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

    } 
} 

И в вашей основной деятельности (где RecyclerView появляется)

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo){ 
    super.onCreateContextMenu(menu, v, menuInfo); 
    MenuInflater menuInflater = getMenuInflater(); 
    menuInflater.inflate(R.menu.my_context_menu, menu); 
} 

, а затем на выбор, что работает для пунктов меню переопределить другой метод

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    //Action to be done 
} 

my_context_menu.xml держит варианты который появится в контекстном меню.

За дополнительной информацией, пожалуйста, обращайтесь к этому How to create context menu for RecyclerView.

Я принудительно преобразовал RecyclerView в ListView, а затем регистрировал это для контекстного меню (которое не требуется), объект выходил равным нулю, поскольку представление еще не создано, то же самое должно быть без внесения в ListView из вашего RecyclerViewAdapter, который вы делаете.

Смежные вопросы