setOnClickListener ListView не работает - PullRequest
18 голосов
/ 04 августа 2010

, поэтому я пытаюсь настроить setOnClickListener для моего ListView, но это вызывает сбой в моей программе по какой-то причине, когда я пытаюсь .. я довольно новичок в программировании, поэтому, когда дело доходит до устранения неполадок, я не могу ничего сделать, к сожалению :(код приведен ниже, поэтому любые идеи о том, что может быть не так, будут чрезвычайно полезны

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);
            }
        });

        //... ... ...

    }
} 

любые мысли? я застрял: (

edit: публикация файла журнала ошибок из 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 сказал мне, что мой код неверен

Ответы [ 5 ]

50 голосов
/ 04 августа 2010

Вам нужно использовать setOnItemClickListener()

, а затем new android.widget.AdapterView.OnItemClickListener()

, а не new View.OnItemClickListener()

5 голосов
/ 21 октября 2011

Вместо использования setOnClickListener, попробуйте использовать setOnItemClickListener

0 голосов
/ 02 января 2019

В моем случае я пытаюсь добавить onClickListener для счетчика, и у меня та же проблема.Я нашел обходной путь с сенсорным слушателем.Иногда нам это нужно для hideKeyBoard или для отправки какого-либо analyticEvent:

someSpinner.setOnTouchListener { _, event ->  onTouchSomeSpinner(event)}

fun onTouchSomeSpinner(event: MotionEvent): Boolean {
        if(event.action == MotionEvent.ACTION_UP) {
            view.hideKeyBoard()
            view.analyticsEvent()
            ...
        }
        return false
}
0 голосов
/ 29 ноября 2017

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

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"

и, если вы используете какие-либо кнопки / текстовое представление внутри списка, установите это свойство для этого текстового представления / кнопки:

    android:focusable="false"
    android:focusableInTouchMode="false"

Для опция прокрутки вв ваш список рассылки просто добавьте эту строку в упражнение:

 listView=(ListView)findViewById(R.id.container);
 listView.setNestedScrollingEnabled(true);

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

0 голосов
/ 27 октября 2014

При использовании Butterknife убедитесь, что у вас нет аннотации OnClick для потомка 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...