Java 如何创建点击文本处理程序?
有一个片段,我从firebase加载数据。父目录称为“新闻”。他有一个孩子新闻1,新闻2,新闻(n)。。它们包含:imageURL(新闻图片)、News_标题(新闻标题)、newsdate(日期新闻)和child News_main(家庭新闻)。它包含imageURL和News_文本。我需要,当我点击新闻时,打开一个新的活动并在其中加载关于这个新闻的信息。这是主要新闻。我不使用唯一的密钥。在recyclerview中加载的标题新闻等 适配器代码:Java 如何创建点击文本处理程序?,java,android,firebase,firebase-realtime-database,android-recyclerview,Java,Android,Firebase,Firebase Realtime Database,Android Recyclerview,有一个片段,我从firebase加载数据。父目录称为“新闻”。他有一个孩子新闻1,新闻2,新闻(n)。。它们包含:imageURL(新闻图片)、News_标题(新闻标题)、newsdate(日期新闻)和child News_main(家庭新闻)。它包含imageURL和News_文本。我需要,当我点击新闻时,打开一个新的活动并在其中加载关于这个新闻的信息。这是主要新闻。我不使用唯一的密钥。在recyclerview中加载的标题新闻等 适配器代码: public class NewsAdapter
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);
}
}
}
公共类NewsAdapter扩展了RecyclerView.Adapter{
语境;
ArrayList新闻;
公共新闻适配器(上下文c,数组列表n){
上下文=c;
新闻=n;
}
@非空
@凌驾
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
返回新的MyViewHolder(LayoutInflater.from(context).充气(R.layout.news_视图,视图组,false));
}
@凌驾
public void onBindViewHolder(@NonNull MyViewHolder MyViewHolder,int i){
myViewHolder.news\u 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\u图片);
}
@凌驾
public int getItemCount(){
returnnews.size();
}
类MyViewHolder扩展了RecyclerView.ViewHolder{
text查看新闻\日期,新闻\标题;
ImageView新闻图片;
公共MyViewHolder(@NonNull View itemView){
超级(项目视图);
news\u date=(TextView)itemView.findViewById(R.id.news\u date);
news\u header=(TextView)itemView.findViewById(R.id.news\u header);
news\u picture=(ImageView)itemView.findviewbyd(R.id.news\u picture);
}
}
}
list=newarraylist();
reference=FirebaseDatabase.getInstance().getReference().child(“新闻”);
addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
list.clear();
对于(DataSnapshot快照:DataSnapshot.getChildren()){
News n=snapshot.getValue(News.class);
列表。添加(n);
}
adapter=NewsAdapter(getContext(),list);
recyclerView.setAdapter(适配器);
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
Toast.makeText(getActivity(),“Toast.LENGTH”SHORT.show();
}
});
你的问题不是很清楚,但我的理解是,当你点击文本时,你想调用一些东西
android上的任何视图都有一个setOnClickListener(处理程序)方法,您只需要获取textview的引用并调用它
news_header.setOnClickListener(new View.OnClickListener() {
int position = getAdapterPosition();
News selected = news.get(position);
// Do whatever you want with the news
}
上面的代码可以让您找到对所选项目的引用。
通过查找getAdapterPosition()
在代码中,您可以插入在单击视图时要调用的任何函数您可以使用此函数在文本单击时将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);
}
});
请添加您的数据库结构和添加侦听器所依据的引用。添加的数据库结构当您单击新闻文本时,我需要打开一个包含此新闻主要文章的新活动。对不起,我的英语)我已使用更正的信息更新了我的答案我知道此方法,我需要将该值传输到片段以加载“main_news”,类似于“reference=FirebaseDatabase.getInstance().getReference(“news”).child(“main_news”)”,但它不正确…我需要在数据库中添加新的子项,或者我可以将其用作标识符“News1”、“News2”您应该在数据库中添加unique作为子项,但也可以使用“News1”、“News2”。只需将这些内容传递给新活动,并在新活动中收听该路径。
myTextView.setOnClickListener(new View.OnClickListener( your code ));
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);
}
});