功能要求:
实现点击recycleview中item跳转设计。比如,某一tab页是新闻列表,则点击某一行能跳转到新闻详情页面。
实现过程:
1. 布局文件中添加RecyclerView
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/news_list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
2. 创建一个 News 类
public class News {
private String title;
private String content;
public News(String title, String content) {
this.title = title;
this.content = content;
}
public String getTitle() {
return title;
}
public String getContent() {
return content;
}
}
3. 创建一个新闻条目的布局文件news_item.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<TextView
android:id="@+id/news_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?attr/textAppearanceListItem" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray" />
</LinearLayout>
4. 创建一个 NewsAdapter 类来管理 RecyclerView 中的数据和视图
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> {
private List<News> newsList;
public NewsAdapter(List<News> newsList) {
this.newsList = newsList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.news_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
News news = newsList.get(position);
holder.titleView.setText(news.getTitle());
}
@Override
public int getItemCount() {
return newsList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView titleView;
public ViewHolder(View view) {
super(view);
titleView = view.findViewById(R.id.news_title);
}
}
}
5. 在 MainActivity 中初始化 RecyclerView 和 NewsAdapter
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private NewsAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.news_list);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
List<News> newsList = new ArrayList<>();
newsList.add(new News("新闻标题1", "新闻内容1"));
newsList.add(new News("新闻标题2", "新闻内容2"));
newsList.add(new News("新闻标题3", "新闻内容3"));
adapter = new NewsAdapter(newsList);
recyclerView.setAdapter(adapter);
}
}
6. 在 NewsAdapter 中添加点击事件处理逻辑
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
News news = newsList.get(position);
holder.titleView.setText(news.getTitle());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 点击事件处理逻辑
Intent intent = new Intent(v.getContext(), NewsDetailActivity.class);
intent.putExtra("title", news.getTitle());
intent.putExtra("content", news.getContent());
v.getContext().startActivity(intent);
}
});
}
7. 创建一个 NewsDetailActivity 类来显示新闻详情页面
public class NewsDetailActivity extends AppCompatActivity {
private TextView titleView;
private TextView contentView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_news_detail);
titleView = findViewById(R.id.news_detail_title);
contentView = findViewById(R.id.news_detail_content);
Intent intent = getIntent();
String title = intent.getStringExtra("title");
String content = intent.getStringExtra("content");
titleView.setText(title);
contentView.setText(content);
}
}
8. 其中activity_news_detail.xml 是新闻详情页面的布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<TextView
android:id="@+id/news_detail_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?attr/textAppearanceListItem" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray" />
<TextView
android:id="@+id/news_detail_content"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
实验结果:
实验源码: