onClickListener не обнаружен

Я не уверен, почему кнопка не работает. Eclipse не показывает никаких красных линий, и я не получаю никаких ошибок в своем приложении при его запуске. Мне просто кажется, что приложение полностью игнорирует щелчок. Я использую вложенные макеты в своем XML, может ли это быть причиной?

Изображения, кажется, работают нормально, когда я нажимаю на них, но не на кнопку.

Код:

    public class HomeActivity extends Activity{

        private Button bSite;

        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            this.requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.homeactivity);

            //addListenerSiteButton();
            bSite = (Button) this.findViewById(R.id.s_button);
            bSite.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://irishfairy.com/"));
                    startActivity(browserIntent);
                 } 
              });

            GridView gv = (GridView) findViewById(R.id.grid_view);

            gv.setAdapter(new ImageAdapter(this));

            /**
             * On Click event for Single Gridview Item
             * */
           gv.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View v,
                        int position, long id) {

                    // Sending image id to FullScreenActivity
                    Intent i = new Intent(getApplicationContext(), FullImageActivity.class);
                    // passing array index
                    i.putExtra("id", position);
                    startActivity(i);
                }
            });
        }
}

XML-файл:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#000000">

    <LinearLayout
        android:id="@+id/main_linear"
        android:layout_alignParentBottom="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/s_button"
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/roundedsitebutton"
            android:gravity="center"
            android:padding="15dip"
            android:clickable="true"
            android:text="@string/site" />

    </LinearLayout>

    <GridView
        android:id="@+id/grid_view"
        android:layout_alignParentTop="true"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:numColumns="auto_fit"
        android:columnWidth="90dp"
        android:horizontalSpacing="10dp"
        android:verticalSpacing="10dp"
        android:gravity="center"
        android:stretchMode="columnWidth"
        android:layout_below="@+id/main_linear">
    </GridView>

</RelativeLayout>

РЕДАКТИРОВАТЬ: я поменял местами android:layout_alignmentParentTop и android:layout_alignmentParentBottom в моем XML, и это сработало:

<LinearLayout
       android:layout_alignParentTop="true"
  </LinearLayout>
<GridView
     android:layout_alignParentBottom="true"
</GridView>

Однако я хочу, чтобы кнопка была внизу.

Это сообщение появилось, когда я запускаю приложение:

03-21 16:51:02.051: D/AbsListView(9953): unregisterIRListener() is called 

РЕДАКТИРОВАТЬ: я попытался изменить:

android:layout_below="@+id/main_linear"

to

android:layout_above="@+id/main_linear"

Однако я получаю следующую ошибку:

03-24 08:59:22.221: E/AndroidRuntime(31598): FATAL EXCEPTION: main
03-24 08:59:22.221: E/AndroidRuntime(31598): Process: com.apps.mobileapp, PID: 31598
03-24 08:59:22.221: E/AndroidRuntime(31598): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.apps.mobileapp/com.apps.mobileapp.HomeActivity}: java.lang.ClassCastException: android.widget.GridView cannot be cast to android.widget.Button

person user1832478    schedule 21.03.2014    source источник
comment
попробуйте записать что-нибудь в прослушиватель кликов и проверьте logcat   -  person Raghunandan    schedule 21.03.2014
comment
Попробуйте переопределить метод onClick. @Override public void onClick(View v) {   -  person fllo    schedule 21.03.2014
comment
@Fllo иметь это нормально, но это не должно иметь никакого значения   -  person Raghunandan    schedule 21.03.2014
comment
наличие кнопки вверху или внизу - это тот же код Java, что и у вас, и он должен работать.   -  person Raghunandan    schedule 21.03.2014
comment
Это то, о чем я думал, но по какой-то причине он, похоже, не обнаруживает щелчок, пока я не поменяю кнопку наверху.   -  person user1832478    schedule 21.03.2014


Ответы (2)


Ваш gridview блокирует кнопку. Вместо того, чтобы иметь: android:layout_below="@+id/main_linear", измените его на android:layout_above="@+id/main_linear"

person Whitney    schedule 21.03.2014
comment
Я попытался перейти на android_layout_above=@+id/main_linear. Однако я получаю Fatal Exception. Я обновил свой ответ. - person user1832478; 24.03.2014
comment
Теперь он работает после того, как я удалил файл R.java, очистив проект. Я отмечу ваш ответ как принятый. - person user1832478; 24.03.2014

В вашей кнопке onClickListener отсутствует аннотация @Override. Попробуйте изменить его на:

bSite.setOnClickListener(new OnClickListener() {

    @Override //added this line
    public void onClick(View v) {
        Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://theirishfairydoorcompany.com/"));
        startActivity(browserIntent);
    }

});

Вы также можете попробовать удалить android:clickable="true" из XML-кода кнопки, если приведенное выше предложение не работает. Иногда он имеет неожиданное поведение и перемещает щелчок в другое представление (см. этот вопрос )

<Button
        android:id="@+id/s_button"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/roundedsitebutton"
        android:gravity="center"
        android:padding="15dip"
        android:text="@string/site" />
person anthonycr    schedule 21.03.2014
comment
Это не сработало после добавления @override и избавления от android:clickable = true. Однако, как и то, что сказал MeMe, я думаю, что это правда, что gridview накладывает кнопки, когда я устанавливаю свой LinearLayout в нижней части моего RelativeLayout. - person user1832478; 24.03.2014