- 在
activity_main.xml
中引入RecyclerView
布局
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/root_layout"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recycler_view"/>
</LinearLayout>
注意:要把RecyclerView完整的包路径写出来,因为RecyclerView不是内置内置在SDK当中的。
public class Bean {
public String name;
public int imageID;
public Bean(String name, int imageID) {
this.name =name;
this.imageID =imageID ;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getimageID () {
return imageID ;
}
public void setimageID (int imageID) {
this.imageID =imageID;
}
}
- 给适配器创建一个布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp">
<ImageView
android:layout_width="75dp"
android:layout_height="75dp"
android:id="@+id/item_image"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/item_name"
android:gravity="center_vertical"/>
</LinearLayout>
- 创建适配器,让这个适配器继承自
RecyclerView.Adapter
,并将泛型指定为MyAdapter.ViewHolder
。其中ViewHolder
是我们在MyAdapter
中定义的一个内部类。
public class MyAdapter extends RecyclerView.Adapter <MyAdapter.ViewHolder> {
private List <Bean> mBean;
public MyAdapter(List <Bean> mBean ) {
super();
this.mBean = mBean;
}
static class ViewHolder extends RecyclerView.ViewHolder {
TextView textView;
ImageView imageView;
public ViewHolder(View view) {
super(view);
textView = (TextView) view.findViewById(R.id.item_name);
imageView = (ImageView) view.findViewById(R.id.item_image);
}
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_bean,parent ,false);
final ViewHolder holder = new ViewHolder(view);
holder.textView.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(),"textview",Toast.LENGTH_SHORT).show();
}
});
holder.imageView.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(),"imageview",Toast.LENGTH_SHORT).show();
}
});
return holder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Bean bean = mBean.get(position);
holder.textView.setText(bean.getName());
holder.imageView.setBackgroundResource(bean.getimageID());
}
@Override
public int getItemCount() {
return mBean.size();
}
}
ViewHolder
的构造函数中要传入一个人参数View
,这个参数通常就是RecyclerView
子项的最外层布局,那么我们就可以通过findViewById()
方法来获取到布局中的ImageView
和TextView
的实例了。
由于MyAdapter
是继承自RecyclerView.Adapter
的,那么就必须重写onCreateViewHolder() 、onBindViewHolder() 和getItemCount()
这3个方法。
onCreateViewHolder()
方法是用于创建ViewHolder
实例的,我们在这个方法中将adapter_item
布局加载进来,然后创建一个ViewHolder
实例,并把加载出来的布局传入到构造函数当中,最后将ViewHolder
的实例返回。
onBindViewHolder()
方法是用于对RecyclerView
子项的数据进行赋值的,会在每个子项被滚动到屏幕内的时候执行,这里我们通过position
参数得到当前项的实例,然后再将数据设置到ViewHolder
的ImageView
和TextView
当中即可。
getItemCount()
方法就非常简单了,它用于告诉RecyclerView
一共有多少子项,直接返回数据源的长度就可以了。
- 最后编写
MainActivity
中的代码
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
private List <Bean> mBean = new ArrayList<Bean>();
private void initData(){
Bean bean1 = new Bean("App_1",R.drawable.ic_launcher_background);
mBean.add(bean1);
Bean bean2 = new Bean("App_2",R.drawable.ic_launcher_background);
mBean.add(bean2);
Bean bean3 = new Bean("App_3",R.drawable.ic_launcher_background);
mBean.add(bean3);
Bean bean4 = new Bean("App_4",R.drawable.ic_launcher_background);
mBean.add(bean4);
Bean bean5 = new Bean("App_5",R.drawable.ic_launcher_background);
mBean.add(bean5);
Bean bean6 = new Bean("App_6",R.drawable.ic_launcher_background);
mBean.add(bean6);
Bean bean7 = new Bean("App_7",R.drawable.ic_launcher_background);
mBean.add(bean7);
Bean bean8 = new Bean("App_8",R.drawable.ic_launcher_background);
mBean.add(bean8);
Bean bean9 = new Bean("App_9",R.drawable.ic_launcher_background);
mBean.add(bean9);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
ActionBar actionBar = getSupportActionBar();
if(actionBar != null) {
actionBar.setHomeButtonEnabled(true);
actionBar.setdisplayHomeAsUpEnabled(true);
}
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
linearlayoutmanager linearlayoutmanager = new linearlayoutmanager(this);
linearlayoutmanager.setorientation(linearlayoutmanager.HORIZONTAL);
recyclerView.setLayoutManager(linearlayoutmanager);
MyAdapter myAdapter = new MyAdapter(mBean);
recyclerView.setAdapter(myAdapter);
}
@Override
public boolean onoptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home :
// Intent backIntent = new Intent(Login.this,MainActivity.class);
// startActivity(backIntent);
finish();
break;
}
return super.onoptionsItemSelected(item);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。