Как я могу добавить прослушиватели кликов дочернему элементу Recycler View? - PullRequest
0 голосов
/ 11 февраля 2019

Вот мой discussion.java, который содержит RecyclerView

public class Discussion extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_discussion);
        RecyclerView mRecycleview =(RecyclerView)findViewById(R.id.cycleview);
        mRecycleview.setLayoutManager(new LinearLayoutManager(this));
        String[] use ={"a","b"};
        String[] lo={"be","ndls"};
        String[] ti={"12:00","11:00"};
        String[] staus={"Today","Tommmorow"};
        int[] posimg={R.drawable.img_post1,R.drawable.img_post2};

        mRecycleview.setAdapter(new FeedAdapter(use,lo,ti,staus,posimg));
        @NonNull
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Open Activity for posting", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

        // Functionality for poll
    }
}

Вот мой FeedAdapter для RecyclerView, который берется из файла макета ресурса content.xml.

public class FeedAdapter extends 
    RecyclerView.Adapter<FeedAdapter.FeedViewHolder> {

    private  String[] userdata;
    private  String[] locdata;
    private  String[] timedata;
    private  int[]   postdata;
    private  String[] statusdata;

    public  FeedAdapter(String[] userdata,String[] locdata,String[] timedata,String[] statusdata,int[] postdata){
        this.userdata=userdata;
        this.locdata=locdata;
        this.postdata=postdata;
        this.statusdata=statusdata;
        this.timedata=timedata;
    }

    @Override
    public FeedViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater=LayoutInflater.from(parent.getContext());
        View view =inflater.inflate(R.layout.backupofcontent,parent,false);
        return new FeedViewHolder(view);
    }

    @Override
    public void onBindViewHolder( FeedAdapter.FeedViewHolder holder, int position) {
        String user=userdata[position];
        String loc=locdata[position];
        String time=timedata[position];
        String status=statusdata[position];
        int post=postdata[position];
        holder.username.setText(user);
        holder.locationa.setText(loc);
        holder.timea.setText(time);
        holder.statusa.setText(status);
        if(post==0)
            holder.postimg.setVisibility(View.GONE);
        else
            holder.postimg.setImageResource(post);
    }

    @Override
    public int getItemCount() {
        return userdata.length;
    }

    public class FeedViewHolder extends RecyclerView.ViewHolder{

        ImageView postimg;
        TextView username;
        TextView locationa;
        TextView timea;
        TextView statusa;

        public FeedViewHolder(View itemView) {
            super(itemView);
            postimg=itemView.findViewById(R.id.imgView_postPic);
            username=itemView.findViewById(R.id.user_name);
            locationa=itemView.findViewById(R.id.Location);
            timea=itemView.findViewById(R.id.Time);
            statusa=itemView.findViewById(R.id.post_text);
        }
    }
}

Вот мой content.xml, с которого адаптер принимает канал.Я хочу настроить onClickListner в представлении id:likelayout" или like, чтобы при его нажатии выполнялись некоторые действия.Пока достаточно тоста.

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

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout

    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    android:orientation="vertical"
    tools:showIn="@layout/app_bar_main"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/user_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center|center_vertical"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="4dp"
        android:text="User"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/Time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/user_name"
        android:layout_gravity="center|center_vertical"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="4dp"
        android:text="Time"
        android:textSize="10sp" />

    <TextView
        android:id="@+id/Location"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/Time"
        android:layout_gravity="center|center_vertical"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="4dp"
        android:text="Location"
        android:textSize="10sp" />

    <LinearLayout
        android:id="@+id/layout_post"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/Location"
        android:layout_marginTop="10dp"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/imgView_postPic"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:scaleType="fitCenter"
            android:src="@drawable/img_post1" />

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_marginTop="10dp"
            android:layout_marginBottom="55dp"
            android:layout_weight="1">

            <TextView
                android:id="@+id/post_text"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Status " />
        </ScrollView>

    </LinearLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:layout_marginBottom="10dp"
        android:gravity="center_vertical"
        android:layout_above="@id/bottomnav">

        <TextView
            android:id="@+id/likecount"
            android:layout_marginLeft="20dp"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="0"
            android:gravity="center" />
        <TextView
            android:id="@+id/likecounttext"
            android:layout_toRightOf="@id/likecount"
            android:layout_marginLeft="10dp"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="Liked"/>
        <TextView
            android:layout_toRightOf="@id/likecounttext"
            android:layout_marginLeft="15dp"
            android:id="@+id/countsepartor"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="|"/>
        <TextView
            android:id="@+id/commentcount"
            android:layout_marginLeft="15dp"
            android:layout_toRightOf="@id/countsepartor"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="0"/>
        <TextView
            android:layout_marginLeft="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/commentcount"
            android:text="Comments"/>

    </RelativeLayout>
    <LinearLayout
        android:id="@+id/bottomnav"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:weightSum="3"
        android:layout_marginBottom="5dp"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal">

        <LinearLayout
            android:id="@+id/likelayout"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_marginLeft="5dp"
            android:layout_gravity="center_vertical"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_width="25dp"
                android:layout_height="wrap_content"
                android:src="@drawable/like"/>
            <TextView
                android:id="@+id/like"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Like"
                android:layout_marginLeft="10dp"
                android:layout_gravity="center_vertical"
                android:textSize="15sp"/>
        </LinearLayout>

        <LinearLayout
            android:id="@+id/commentlayout"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_gravity="center_vertical"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_width="25dp"
                android:layout_height="wrap_content"
                android:src="@drawable/comment"/>
            <TextView
                android:id="@+id/comment"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Comment"
                android:layout_marginLeft="10dp"
                android:layout_gravity="center_vertical"
                android:textSize="15sp"/>
        </LinearLayout>
        <LinearLayout
            android:id="@+id/polllayout"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:layout_gravity="center_vertical"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_width="25dp"
                android:layout_height="wrap_content"
                android:src="@drawable/poll"/>
            <TextView
                android:id="@+id/poll"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Poll"
                android:layout_marginLeft="10dp"
                android:layout_gravity="center_vertical"
                android:textSize="15sp"/>
        </LinearLayout>
    </LinearLayout>
</RelativeLayout>

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

В вашей функции onBindViewHolder просто добавьте прослушиватель кликов, как показано ниже.

@Override
public void onBindViewHolder( FeedAdapter.FeedViewHolder holder, int position) {
    String user=userdata[position];
    String loc=locdata[position];
    String time=timedata[position];
    String status=statusdata[position];
    int post=postdata[position];
    holder.username.setText(user);
    holder.locationa.setText(loc);
    holder.timea.setText(time);
    holder.statusa.setText(status);

    if(post==0)
        holder.postimg.setVisibility(View.GONE);
    else
        holder.postimg.setImageResource(post);

    holder.username.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            // Do something. 
        }
    });
}

Если вы хотите настроить прослушиватель щелчка для других элементов пользовательского интерфейса в элементе списка, просто объявите их так, как вы объявили username, timea, statusa и т. Д.и затем добавьте слушателя к нему.

Имейте в виду, что для того, чтобы сделать ImageView кликабельным, вам нужно добавить атрибут clickable к true в вашем файле макета.Например, если вам нужно, чтобы ваше изображение было кликабельным, вам нужно добавить атрибут clickable, как показано ниже.

<ImageView
    android:id="@+id/like_image"
    android:layout_width="25dp"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:src="@drawable/like"/>

Чтобы показать Toast при нажатии на элемент, вам нужно иметь Context действия Discussion во время создания адаптера.Поэтому я хотел бы предложить вам изменить конструктор адаптера следующим образом.

public class FeedAdapter extends 
    RecyclerView.Adapter<FeedAdapter.FeedViewHolder> {

    private  String[] userdata;
    private  String[] locdata;
    private  String[] timedata;
    private  int[]   postdata;
    private  String[] statusdata;

    // Add another extra variable to store context
    // The context is necessary for showing toast
    private Context context; 

    public  FeedAdapter(String[] userdata, String[] locdata,String[] timedata, String[] statusdata, int[] postdata, Context context){
        this.userdata = userdata;
        this.locdata = locdata;
        this.postdata = postdata;
        this.statusdata = statusdata;
        this.timedata = timedata;
        this.context = context; // Initialize it here
    }

    @Override
    public FeedViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater=LayoutInflater.from(parent.getContext());
        View view =inflater.inflate(R.layout.backupofcontent,parent,false);
        return new FeedViewHolder(view);
    }

    @Override
    public void onBindViewHolder( FeedAdapter.FeedViewHolder holder, int position) {
        String user=userdata[position];
        String loc=locdata[position];
        String time=timedata[position];
        String status=statusdata[position];
        int post=postdata[position];
        holder.username.setText(user);
        holder.locationa.setText(loc);
        holder.timea.setText(time);
        holder.statusa.setText(status);

        if(post==0)
            holder.postimg.setVisibility(View.GONE);
        else
            holder.postimg.setImageResource(post);

        // Use the context here to show the Toast 
        holder.username.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(context, "Something", Toast.LENGTH_LOGN).show();
            }
        });
    }

    @Override
    public int getItemCount() {
        return userdata.length;
    }

    public class FeedViewHolder extends RecyclerView.ViewHolder{

        ImageView postimg;
        TextView username;
        TextView locationa;
        TextView timea;
        TextView statusa;

        public FeedViewHolder(View itemView) {
            super(itemView);
            postimg=itemView.findViewById(R.id.imgView_postPic);
            username=itemView.findViewById(R.id.user_name);
            locationa=itemView.findViewById(R.id.Location);
            timea=itemView.findViewById(R.id.Time);
            statusa=itemView.findViewById(R.id.post_text);
        }
    }
}

И чтобы принять изменения модифицированного конструктора, адаптер должен быть инициализирован, как показано ниже в вашем Discussion классе.

mRecycleview.setAdapter(new FeedAdapter(use, lo, ti, staus, posimg, this));

Надеюсь, это поможет!

0 голосов
/ 11 февраля 2019

То же, что и в других представлениях, в классе FeedViewHolder добавьте переменную LinearLayout:

LinearLayout like;

затем

like = itemView.findViewById(R.id.likelayout);

затем в onBindViewHolder используйте:

holder.like.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                // Like Layout was clicked
            }
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...