ListItem не отвечает на clickEvents в ArrayAdapter в Android? - PullRequest
0 голосов
/ 25 июня 2019

"Я пытался создать сообщение Toast, когда пользователь нажимает на Description TextView и Like ImageButton. Но list_item не отвечает на сенсорные события"

«Я прошел через множество других людей, отвечавших на вопрос об изменении фокуса. Но никто из них не работает»

        EventsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                final EventsObject mEventsObject = mEventsAdapter.getItem(position);
                final String mEventUrl = mEventsObject.geteLink();
                Log.e(TAG, "Inside ListVIew");
                final boolean status = mEventsObject.hasLiked();
                //LikeButton likeButton = view.findViewById(R.id.heart_button);
                TextView description = view.findViewById(R.id.eventDesc);
                //final TextView likesCountTextView = view.findViewById(R.id.likesCount);
                Toast.makeText(MainActivity.this, "Liked", Toast.LENGTH_SHORT).show();
                description.setFocusable(false);
                description.setFocusableInTouchMode(false);
                description.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (!TextUtils.isEmpty(mEventUrl)) {
                            Intent openLinkInBrowser = new Intent(Intent.ACTION_VIEW);
                            openLinkInBrowser.setData(Uri.parse(mEventUrl));
                            startActivity(openLinkInBrowser);
                        } else {
                            Toast.makeText(MainActivity.this, "Links are not provided", Toast.LENGTH_SHORT).show();
                        }
                    }
                });
                Button loveBtn = view.findViewById(R.id.loveButton);
                loveBtn.setFocusable(false);
                loveBtn.setFocusableInTouchMode(false);
                loveBtn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (status) {
                            Toast.makeText(MainActivity.this, "Liked", Toast.LENGTH_SHORT).show();
                            mEventsObject.setHeartLiked(true);
                        } else {
                            Toast.makeText(MainActivity.this, "Disliked", Toast.LENGTH_SHORT).show();
                            mEventsObject.setHeartLiked(false);
                        }
                    }
                });

            }

XML для list_item -

?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="8dp"
    android:orientation="vertical"

    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/organiser"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:paddingLeft="16dp"
            android:textAllCaps="true"
            android:textColor="#ffffff"
            android:textSize="16sp"
            android:textStyle="bold"
            tools:text="Organiser" />

        <TextView
            android:id="@+id/dateOfEvent"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="right"
            android:textColor="#ffffff"
            android:textStyle="bold"
            tools:text="12/03/20" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/organiserImage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/events_circle"
            android:padding="16dp"
            android:src="@mipmap/ic_launcher"
            android:textColor="#ffffff" />

        <TextView
            android:id="@+id/eventDesc"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="4dp"
            android:gravity="fill"
            android:textColor="#ffffff"
            android:textSize="16sp"
            tools:text="@string/test_event_desc" />
    </LinearLayout>

    <ImageButton
        android:id="@+id/loveButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginBottom="8dp"
        android:background="@drawable/events_love"

        android:scaleType="center"
        android:src="@drawable/love" />
    <!--
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginTop="0dp">

            <com.like.LikeButton
                app:icon_type="heart"
                app:icon_size="18dp"
                android:id="@+id/heart_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                app:circle_start_color="#ff2134"
                app:circle_end_color="#000000"

                />
    -->
    <!--<TextView
        android:id="@+id/likesCount"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        tools:text="10"
        android:textColor="#ffffff"/>
</LinearLayout>-->

</LinearLayout>

"Я бы хотел, чтобы list_item отвечал на события кликов и отображал тост-сообщение. Пожалуйста помоги.. Заранее спасибо! "

1 Ответ

0 голосов
/ 27 июня 2019

Это может быть потому, что вы пытаетесь выполнить щелчок внутри слушателя щелчка элемента ListView.

Вы можете исправить это, создав специальный адаптер для просмотра списка. Адаптер списка клиентов

После создания этого пользовательского адаптера вы можете получить ссылку description и loveBtn и выполнить операцию щелчка по нему.

Код getView () вашего адаптера будет таким:

   @Override
   public View getView(int position, View convertView, ViewGroup parent) {
      if(convertView==null) {
         LayoutInflater layoutInflater = LayoutInflater.from(context);
         convertView=layoutInflater.inflate(R.layout.list_row, null);

         TextView description=convertView.findViewById(R.id.eventDesc);
         Button loveBtn=convertView.findViewById(R.id.loveButton);

      }

         description.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (!TextUtils.isEmpty(mEventUrl)) {
                        Intent openLinkInBrowser = new Intent(Intent.ACTION_VIEW);
                        openLinkInBrowser.setData(Uri.parse(mEventUrl));
                        startActivity(openLinkInBrowser);
                    } else {
                        Toast.makeText(MainActivity.this, "Links are not provided", Toast.LENGTH_SHORT).show();
                    }
                }
            });

           loveBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (status) {
                        Toast.makeText(MainActivity.this, "Liked", Toast.LENGTH_SHORT).show();
                        mEventsObject.setHeartLiked(true);
                    } else {
                        Toast.makeText(MainActivity.this, "Disliked", Toast.LENGTH_SHORT).show();
                        mEventsObject.setHeartLiked(false);
                    }
                }
            });

      return convertView;
   }
...