这一节,简单地复习一下RecyclerView,可以说它就是ListView的加强版,很多商业应用中都能看到它的身影。理论不多说,直接上代码:
第一步:在build.gradle文件中添加依赖:
第二步:实现布局dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.2.1' compile 'com.android.support:recyclerview-v7:23.0.1' }
第三步,java代码:<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="startimes.ljt.recyclerdecoration.MainActivity"> <TextView android:id="@+id/tvprograme" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="音悦台" android:focusable="true" android:gravity="center_horizontal" /> <android.support.v7.widget.RecyclerView android:id="@+id/rv_country_radio" android:layout_below="@id/tvprograme" android:layout_width="match_parent" android:layout_height="match_parent" android:focusable="true"> </android.support.v7.widget.RecyclerView> </RelativeLayout>
public class MainActivity extends Activity implements View.OnFocusChangeListener { private RecyclerView recyclerView; private StaggeredGridLayoutManager staggeredGridLayoutManager; private HomeAdapter adapter; private List<String> sData; private TextView tvProName; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initWidget(); initData(); setAdapter(); } private void initWidget() { tvProName = (TextView) findViewById(R.id.tvprograme); setFocus(tvProName); recyclerView = (RecyclerView) findViewById(R.id.rv_country_radio); recyclerView.setItemAnimator(new DefaultItemAnimator()); //设置布局,此处为表格布局,可根据自己需求定义 staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL); recyclerView.setLayoutManager(staggeredGridLayoutManager); recyclerView.setOnFocusChangeListener(this); //可以为RecyclerView设置焦点的走向 //recyclerView.setNextFocusUpId(R.id.xx); adapter = new HomeAdapter(MainActivity.this); //点击事件 adapter.setOnItemClickListener(new HomeAdapter.OnItemClickListener() { @Override public void onItemClick(View view, int position) { } }); //选择事件 adapter.setOnItemSelectListener(new HomeAdapter.OnItemSelectListener() { @Override public void onItemSelect(View view, int position) { } }); recyclerView.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { } }); } private void initData() { sData = new ArrayList<>(); for(int i=0;i<100;i++){ sData.add("第"+i+"个数据"); } adapter.setData(sData); } private void setAdapter() { recyclerView.setAdapter(adapter); } //添加数据 public void addRecyclerData(View view){ sData.add("新添加数据"+new Random().nextInt(100)); adapter.setData(sData); int position=sData.size(); if(position>0){ adapter.notifyDataSetChanged(); } } //删除数据 public void delRecyclerData(View view){ int position=sData.size(); if(position>0){ sData.remove(position-1); adapter.setData(sData); adapter.notifyDataSetChanged(); } } @Override public void onFocusChange(View v, boolean hasFocus) { } private void setFocus(TextView tv) { tv.setFocusableInTouchMode(true); tv.requestFocus(); tv.requestFocusFromTouch(); } }
Adapter实现类:
public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.ViewHolder>{ private Context mContext; private LayoutInflater mInflater; private List<String> rvData; public HomeAdapter(Context mContext) { this.mContext = mContext; mInflater= (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } //设置数据 public void setData(List<String> strings){ rvData=strings; } //选择item事件,用于在AndroidTV应用开发时 public interface OnItemSelectListener { void onItemSelect(View view, int position); } private OnItemSelectListener mSelectListener; public void setOnItemSelectListener(OnItemSelectListener listener) { mSelectListener = listener; } //点击item事件 public interface OnItemClickListener { void onItemClick(View view, int position); } private OnItemClickListener mListener; public void setOnItemClickListener(OnItemClickListener listener){ mListener=listener; } //初始化控件 @Override public HomeAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = mInflater.inflate(R.layout.item_layout, parent, false); ViewHolder holder = new ViewHolder(view); holder.tv= (TextView) view.findViewById(R.id.tv); return new ViewHolder(view); } //绑定数据 @Override public void onBindViewHolder(ViewHolder holder, int position) { String s = rvData.get(position); holder.tv.setText(s); } @Override public int getItemCount() { return rvData.size(); } //继承抽象类 public static class ViewHolder extends RecyclerView.ViewHolder { TextView tv; public ViewHolder(View itemView) { super(itemView); } } //为每一个item添加数字,可用于语音应用开发,调用时如:tv.setText(getFileIndex(position)); private String getFileIndex(int position) { position++; String index; if (position < 10) { index = "0" + position + " "; } else { index = position + " "; } return index; } }
这只是RecyclerView的一个入门,里面有很多方法可根据实际开发需求来调用。