Ответ 1
Вам нужно использовать setOnItemClickListener()
а затем new android.widget.AdapterView.OnItemClickListener()
не new View.OnItemClickListener()
поэтому я пытаюсь настроить setOnClickListener для своего ListView, но это вызвало крах в моей программе по какой-то причине, когда я пытаюсь.. im совершенно новый для программирования, поэтому, когда дело доходит до устранения неполадок, я не могу сделать что-то грустно:( мой код ниже, поэтому любые идеи о том, что может быть неправильным, будут чрезвычайно полезны
public class HomePageActivity extends Activity {
//ListView that holds the items
ListView lstTest;
//Array Adapter that holds the ArrayList and displays the items on the ListView
AlertsAdapter arrayAdapter;
//List that hosts the items
ArrayList<Alerts> alrts = null;
/** Called when the activity is first created. */
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.homepage);
//Initialize the ListView
lstTest = (ListView)findViewById(R.id.lstText);
//Initialize the ArrayList
alrts = new ArrayList<Alerts>();
//Initialize the array adapter
arrayAdapter = new AlertsAdapter(HomePageActivity.this, R.layout.listitems,alrts);
//Set the above adapter as the adapter of choice for our list
lstTest.setAdapter(arrayAdapter);
lstTest.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(
HomePageActivity.this,
PromotionActivity.class
);
startActivity(intent);
}
});
//... ... ...
}
}
любые мысли? im stuck: (
изменить: отправить файл журнала ошибок из ddms
08-04 04:14:26.351: ERROR/AndroidRuntime(8882): FATAL EXCEPTION: main
08-04 04:14:26.351: ERROR/AndroidRuntime(8882): java.lang.RuntimeException: Unable to start activity ComponentInfo{hypenyte.bdutcher.promopost/hypenyte.bdutcher.promopost.HomePageActivity}: java.lang.RuntimeException: Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
08-04 04:14:26.351: ERROR/AndroidRuntime(8882): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
08-04 04:14:26.351: ERROR/AndroidRuntime(8882): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
08-04 04:14:26.351: ERROR/AndroidRuntime(8882): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
08-04 04:14:26.351: ERROR/AndroidRuntime(8882): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
08-04 04:14:26.351: ERROR/AndroidRuntime(8882): at android.os.Handler.dispatchMessage(Handler.java:99)
08-04 04:14:26.351: ERROR/AndroidRuntime(8882): at android.os.Looper.loop(Looper.java:123)
08-04 04:14:26.351: ERROR/AndroidRuntime(8882): at android.app.ActivityThread.main(ActivityThread.java:4627)
08-04 04:14:26.351: ERROR/AndroidRuntime(8882): at java.lang.reflect.Method.invokeNative(Native Method)
08-04 04:14:26.351: ERROR/AndroidRuntime(8882): at java.lang.reflect.Method.invoke(Method.java:521)
08-04 04:14:26.351: ERROR/AndroidRuntime(8882): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-04 04:14:26.351: ERROR/AndroidRuntime(8882): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-04 04:14:26.351: ERROR/AndroidRuntime(8882): at dalvik.system.NativeStart.main(Native Method)
08-04 04:14:26.351: ERROR/AndroidRuntime(8882): Caused by: java.lang.RuntimeException: Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
08-04 04:14:26.351: ERROR/AndroidRuntime(8882): at android.widget.AdapterView.setOnClickListener(AdapterView.java:750)
08-04 04:14:26.351: ERROR/AndroidRuntime(8882): at hypenyte.bdutcher.promopost.HomePageActivity.onCreate(HomePageActivity.java:58)
08-04 04:14:26.351: ERROR/AndroidRuntime(8882): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-04 04:14:26.351: ERROR/AndroidRuntime(8882): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
08-04 04:14:26.351: ERROR/AndroidRuntime(8882): ... 11 more
Я видел, что он сказал, что я, вероятно, хочу setOnItemClickListener, который изначально был тем, что я его закодировал, но что он не будет работать, поскольку eclipse сказал мне, что мой код был не прав с ним.
Вам нужно использовать setOnItemClickListener()
а затем new android.widget.AdapterView.OnItemClickListener()
не new View.OnItemClickListener()
Вместо использования setOnClickListener
попробуйте использовать setOnItemClickListener
Если вы используете Butterknife, убедитесь, что у вас нет аннотации OnClick для Descentant AdapterView (Spinner, ListView и т.д.).
@OnClick(R.id.spinner_id)
Вызов ButterKnife.inject(this, view);
вызовет исключение
Caused by: java.lang.RuntimeException: Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
сначала установите значение внутри основного действия, в котором используется ваш список:
new android.widget.AdapterView.OnItemClickListener()
вместо адаптера вашего списка:
new AdapterView.OnItemClickListener()
Итак, это выглядит так:
this.listView.setItemsCanFocus(false);
this.listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
@Override
public void onItemClick(android.widget.AdapterView<?> parent, View view, int position, long id) {
}
когда вы используете какое-либо пользовательское представление для заполнения данных внутри списка.
Затем в вашем основном файле Activity.xml в родительском макете {внутри которого есть список] установите этот параметр:
android:descendantFocusability="blocksDescendants"
и если вы используете какие-либо кнопки /textview внутри listview, установите это свойство на этой кнопке textview/:
android:focusable="false"
android:focusableInTouchMode="false"
Для параметра прокрутки в вашем списке просто добавьте эту строку в действие:
listView=(ListView)findViewById(R.id.container);
listView.setNestedScrollingEnabled(true);
Как я понял, я даю ответ, и я надеюсь, что это поможет, если кто-нибудь найдет некоторые исправления или поможет, они приветствуются.