Android RecyclerView之ListView显示(二)

本文介绍了如何使用RecyclerView替代ListView,并详细展示了如何设置垂直和水平显示,包括正向和反向排列,通过创建适配器、布局管理器和数据Bean来完成ListView的各种显示效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android RecyclerView之ListView显示(二)
效果图
  垂直显示(标准显示)       垂直反向显示             水平显示             水平反向显示




Android RecyclerView之ListView显示
本博文讲述了运用RecyclerView替代ListView
Android RecyclerView详解(一)中已经介绍过了RecyclerView的基本运用接下来我要使用强大RecyclerView来显示ListView的效果。
1.将RecyclerView添加到布局文件并关联兼容包(注意:低版本的安卓系统,要进行兼容包的关联)
步骤:按住control+alt+shift+s出现Project Structure按下图所示关联

关联成功后在主布局文件activity_main中添加RecyclerView

2.在与主类MainActivity同级下新建一个包名为menu在包中新建一个类为DateBean用于归纳信息

3.新建一个行布局名为list_item,并添加一个ImageView和TextView
  
<? xml version= "1.0" encoding= "utf-8" ?>
< RelativeLayout xmlns: android = "http://schemas.android.com/apk/res/android"
android :layout_width= "match_parent"
android :layout_height= "wrap_content" >
< ImageView
android :id= "@+id/item_list_icon"
android :layout_width= "100dp"
android :layout_height= "100dp"
android :src= "@mipmap/ic_launcher" />
< TextView
android :id= "@+id/item_list_name"
android :layout_width= "match_parent"
android :layout_height= "wrap_content"
android :layout_centerVertical= "true"
android :layout_toRightOf= "@+id/item_list_icon"
android :text= "图片描述"
android :textSize= "28sp"
android :textStyle= "bold" />
</ RelativeLayout >
4.在res文件下新建一个包为menu在包中建一个menu布局文件用于显示下拉菜单
如果想了解详细的Menu菜单栏详细使用可以点击:Android Menu菜单栏
  
<? xml version= "1.0" encoding= "utf-8" ?>
< menu xmlns: android = "http://schemas.android.com/apk/res/android"
xmlns: app = "http://schemas.android.com/apk/res-auto" >
< item
android :id= "@+id/action_ListView"
android :orderInCategory= "100"
android :title= "ListView显示"
app :showAsAction= "never" >
< menu >
< item
android :id= "@+id/action_ListView_noraml"
android :orderInCategory= "100"
android :title= "标准"
app :showAsAction= "never" />
< item
android :id= "@+id/action_ListView_vertical_reverse"
android :orderInCategory= "100"
android :title= "垂直反向"
app :showAsAction= "never" />
< item
android :id= "@+id/action_ListView_horizontal"
android :orderInCategory= "100"
android :title= "水平"
app :showAsAction= "never" />
< item
android :id= "@+id/action_ListView_horizontal_reverse"
android :orderInCategory= "100"
android :title= "水平反向"
app :showAsAction= "never" />
</ menu >
</ item >
</ menu >
5.RecyclerView适配器,
RecyclerView适配器的详细介绍可以点击:Android RecyclerView详解(一)
  
package com.example.recyclerview_activity.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.recyclerview_activity.R;
import com.example.recyclerview_activity.menu.DateBean;
import java.util.List;
/**
* Date:2017/3/14
* author:陈箫阳ChenXiaoYang
* furction:RecycleView的适配器注意要指定泛型,一般我们就是类名的ViewHodler继承ViewHodler(内部已经实现了复用优化机制)
*/
public class RecyclerViewListAdapter extends RecyclerView.Adapter<RecyclerViewListAdapter.ListViewHolder> {
private Context mContext ;
//泛型是RecyclerView所需的Bean类
private List<DateBean> mDateBeen ;
//构造方法,一般需要接收两个参数 1.上下文 2.集合对象(包含了我们所需要的数据)
public RecyclerViewListAdapter(Context context, List<DateBean> dateBeen) {
mContext = context;
mDateBeen = dateBeen;
}
//创建VIewHolder也就是创建出来一条Item,并把viewHolder(item)返回出去
@Override
public RecyclerViewListAdapter.ListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//转换一个ViewHolder对象,决定了item的样式,参数1.上下文 2.XML布局资源 3.null
View itemView = View. inflate ( mContext , R.layout. list_item , null );
//创建一个ViewHodler对象
ListViewHolder listViewHolder = new ListViewHolder(itemView);
//把ViewHolder传出去
return listViewHolder;
}
//当ViewHolder和数据绑定是回调
@Override
public void onBindViewHolder(RecyclerViewListAdapter.ListViewHolder holder, int position) {
//从集合里拿对应的item的数据对象
DateBean dateBean = mDateBeen .get(position);
//给Holder里面的控件对象设置数据
holder.setData(dateBean);
}
//决定RecyclerView有多少条item
@Override
public int getItemCount() {
//数据不为null,有几条数据就显示几条数据
if ( mDateBeen != null && mDateBeen .size() > 0 ) {
return mDateBeen .size();
}
return 0 ;
}
//自动帮我们写的ViewHolder,参数:View布局对象
public class ListViewHolder extends RecyclerView.ViewHolder {
private final ImageView mImageView ;
private final TextView mTextView ;
public ListViewHolder(View itemView) {
super (itemView);
mImageView = (ImageView) itemView.findViewById(R.id. item_list_icon );
mTextView = (TextView) itemView.findViewById(R.id. item_list_name );
}
public void setData(DateBean data) {
//给imageView设置图片数据
mImageView .setImageResource(data. icon );
//给TextView设置文本数据
mTextView .setText(data. name );
}
}
}
6.编写主类
  
package com.example.recyclerview_activity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import com.example.recyclerview_activity.adapter.RecyclerViewListAdapter;
import com.example.recyclerview_activity.menu.DateBean;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerVIew ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
//初始化控件
mRecyclerVIew = (RecyclerView) findViewById(R.id. recyclerView );
}
//RecyclerView填充数据,实现ListView效果
private void loadListDate(Boolean inversion, Boolean orientation) {
//集合对象
ArrayList<DateBean> dateBeanArrayList = new ArrayList<>();
//给Bean类放数据,把装好数据的Bean类放到集合里
for ( int i = 0 ; i < 20 ; i++) {
//创建Bean类对象
DateBean dateBean = new DateBean();
//给benu类对象添加图片和信息
dateBean. icon = R.mipmap. ic_launcher ;
dateBean. name = "RecyclerViewList" + i;
//把Bean类放入集合
dateBeanArrayList.add(dateBean);
}
//创建适配器adapter对象 参数有两个1.上下文 2.数据加载集合
RecyclerViewListAdapter recyclerViewadapter = new RecyclerViewListAdapter( this , dateBeanArrayList);
//设置适配器
mRecyclerVIew .setAdapter(recyclerViewadapter);
//布局管理器所需参数:上下文
LinearLayoutManager linearLayoutManager = new LinearLayoutManager( this );
//通过布局管理器可以控制条目排列的顺序 true反向显示 false正常显示(默认)
linearLayoutManager.setReverseLayout(inversion);
//设置RecycleView显示的方向是水平还是垂直
//LinearLayoutManager.HORIZONTAL水平 LinearLayoutManager.VERTICAL默认垂直
// 三元运算符
linearLayoutManager.setOrientation(orientation ? LinearLayoutManager. VERTICAL : LinearLayoutManager. HORIZONTAL );
//设置布局管理器, 参数linearLayoutManager对象
mRecyclerVIew .setLayoutManager(linearLayoutManager);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//加载布局使用菜单特有方法,getMenuInflate对象
//参数1.菜单显示的布局 2.固定Menu
getMenuInflater().inflate(R.menu. menu_main , menu);
return true ;
}
//菜单按钮点击事件处理
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
if (itemId == R.id. action_ListView_noraml ) {
//标准显示(垂直)
loadListDate( false , true );
Toast. makeText (MainActivity. this , "成功" , Toast. LENGTH_SHORT ).show();
return true ;
} //List垂直反向显示
else if (itemId == R.id. action_ListView_vertical_reverse ) {
loadListDate( true , true );
} //List水平显示
else if (itemId == R.id. action_ListView_horizontal ) {
loadListDate( false , false );
} //List水平反向
else if (itemId == R.id. action_ListView_horizontal_reverse ) {
loadListDate( true , false );
}
return super .onOptionsItemSelected(item);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值