如何创建处理程序单击文本?

时间:2019-04-01 16:14:11

标签: java android firebase firebase-realtime-database android-recyclerview

有一个片段,我在其中从Firebase加载数据。父目录称为“新闻”。他有一个子news1,news2,news(n)。它们包含:imageURL(新闻图片),news_header(新闻标题),newsdate(日期新闻)以及子news_main(家庭新闻),其中包含imageURL和news_text。当我单击新闻时,我需要打开一个新活动并在其中加载有关此新闻的信息。那是news_main。我不使用唯一密钥。标题新闻等已加载到recyclerview中。

适配器代码:

public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.MyViewHolder> {

    Context context;
    ArrayList<News> news;


    public NewsAdapter(Context c, ArrayList<News> n) {
        context = c;
        news = n;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.news_view, viewGroup, false));
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {

        myViewHolder.news_date.setText(news.get(i).getDatenews());
        myViewHolder.news_header.setText(news.get(i).getHeader_news());
        Picasso.get().load(news.get(i).getImageURL()).into(myViewHolder.news_picture);

    }

    @Override
    public int getItemCount() {
        return news.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder {

        TextView news_date, news_header;
        ImageView news_picture;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);

            news_date = (TextView) itemView.findViewById(R.id.news_date);
            news_header = (TextView) itemView.findViewById(R.id.news_header);
            news_picture = (ImageView) itemView.findViewById(R.id.news_picture);
        }
    }
}

enter image description here

    list = new ArrayList<News>();

    reference = FirebaseDatabase.getInstance().getReference().child("News");
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            list.clear();
            for (DataSnapshot snapshot : dataSnapshot.getChildren()){

                News n = snapshot.getValue(News.class);
                list.add(n);
            }
            adapter = new NewsAdapter(getContext(), list);
            recyclerView.setAdapter(adapter);

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Toast.makeText(getActivity(), "Что то не так", Toast.LENGTH_SHORT).show();
        }
    });

3 个答案:

答案 0 :(得分:1)

您的问题不是很清楚,但是我了解的是您想在单击文本时调用某些内容。

Android上的任何视图都具有setOnClickListener(handler)方法,您只需要获取textview的引用并调用它

news_header.setOnClickListener(new View.OnClickListener() {
    int position = getAdapterPosition();
    News selected = news.get(position);
    // Do whatever you want with the news
}

上面的代码使您可以找到对所选项目的引用。 寻找getAdapterPosition()

可以了解更多

答案 1 :(得分:0)

myTextView.setOnClickListener(new View.OnClickListener( your code ));

在您的代码中,您可以插入要单击视图时要调用的任何函数

答案 2 :(得分:0)

您可以使用此功能将ID或其他任何内容传递给文本点击中的其他活动

myTextView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
       Intent intent = new Intent(context,NewActivity.class);
       intent.putExtra("id", ""+id);
       context.startActivity(intent);
    }
});
相关问题