Сбой приложения при длительном нажатии на первые элементы

#android

#Android

Вопрос:

Мое приложение выходит из строя при длительном нажатии на первые элементы списка.На самом деле первым элементом является «Перейти в верхнюю папку», который добавляется вручную, а после «Перейти в верхнюю папку» появляется список элементов просмотра.Теперь я использую длительное нажатие на все элементы списка, кроме элементов «Перейти в верхнюю папку». Но когда я долго нажимаю «Перейти в папку вверх», мое приложение разбивается. Небольшая часть моего кода приведена ниже:

 if (tt != null) 
{
if ((m_remotefilepath == null)|| (m_remotefilepath.matches("/"))) 
 {
 tt.setText(items[position].m_FileName);
 } 
else 
{
 if (position > 0) 
 {
 tt.setText(items[position].m_FileName);
} 
else 
{
tt.setText("Go To Up Folder");
imageView.setImageResource(R.drawable.up);
}
}
}
  

МОЙ журнал cat:

 04-27 12:06:21.635: DEBUG/AndroidRuntime(230): Shutting down VM
04-27 12:06:21.645: WARN/dalvikvm(230): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
04-27 12:06:21.686: ERROR/AndroidRuntime(230): Uncaught handler: thread main exiting due to uncaught exception
04-27 12:06:21.965: ERROR/AndroidRuntime(230): java.lang.NullPointerException
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at com.officelinq.android.OfficeLinQ.onCreateContextMenu(OfficeLinQ.java:1549)
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at android.view.View.createContextMenu(View.java:4086)
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at com.android.internal.view.menu.ContextMenuBuilder.show(ContextMenuBuilder.java:81)
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at com.android.internal.policy.impl.PhoneWindow$DecorView.showContextMenuForChild(PhoneWindow.java:1848)
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:458)
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:458)
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:458)
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:458)
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:458)
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at android.view.ViewGroup.showContextMenuForChild(ViewGroup.java:458)
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at android.widget.AbsListView.performLongPress(AbsListView.java:1703)
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at android.widget.AbsListView.access$500(AbsListView.java:71)
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at android.widget.AbsListView$CheckForLongPress.run(AbsListView.java:1656)
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at android.os.Handler.handleCallback(Handler.java:587)
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at android.os.Handler.dispatchMessage(Handler.java:92)
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at android.os.Looper.loop(Looper.java:123)
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at android.app.ActivityThread.main(ActivityThread.java:4363)
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at java.lang.reflect.Method.invokeNative(Native Method)
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at java.lang.reflect.Method.invoke(Method.java:521)
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
04-27 12:06:21.965: ERROR/AndroidRuntime(230):     at dalvik.system.NativeStart.main(Native Method)
04-27 12:06:22.235: INFO/Process(34): Sending signal. PID: 230 SIG: 3
04-27 12:06:22.285: INFO/dalvikvm(230): threadid=7: reacting to signal 3
04-27 12:06:22.963: INFO/dalvikvm(230): Wrote stack trace to '/data/anr/traces.txt'
  

Код в строке № 1549 является:
menu.setHeaderTitle(m_adapter.items[info.position].m_FileName);

Комментарии:

1. Пожалуйста, предоставьте трассировку стека из выходных данных logcat, если ваше приложение выходит из строя.

2. У вас есть NullPointerException при создании контекстного меню в com.officelinq.android.OfficeLinQ.onCreateContextMenu(OfficeLinQ.java:1549) . Какова точная эта строка кода?

Ответ №1:

Когда вы выполняете «длинный» щелчок, он пытается создать контекстное меню, которое не было установлено. Пожалуйста, установите контекстное меню для элементов, и, возможно, ваша проблема будет решена.

Комментарии:

1. общедоступная пустота onCreateContextMenu (контекстное меню, просмотр v, ContextMenuInfo menuInfo) { switch (m_tmpData.m_tempParamInt4) { case LIST_TYPE_FILEMANAGER: // List FileManager if (v.getId() == android.R.id.list) { AdapterView. AdapterContextMenuInfo info = (AdapterView. AdapterContextMenuInfo) menuInfo; menu.setHeaderTitle(m_adapter.items[info.position]. m_FileName); String[] MenuItems = getResources() .getStringArray(R.array.menu); for (int i = 0; i < MenuItems. длина; i ) { menu.add(Menu.NONE, i, i, MenuItems[i]); } } разрыв;

2. Пожалуйста, подскажите мне, как установить контекстное меню для элементов.

3. Возможно, тип вашего tt или элементов [i] имеет setContextMenu () или аналогичный, пожалуйста, проверьте API.

Ответ №2:

Сегодня у меня тоже возникла эта проблема. Это вызвано использованием SELECTION_MODE_MULTIPLE_MODAL без вызова ListView.setMultiChoiceModeListener(). Либо используйте SELECTION_MODE_MULTIPLE, либо установите прослушиватель, чтобы он исчез.