ListView和RecyclerView控件的使用
9.ListView
(1).xml简单配置即可
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listview"/>
(2)在主函数中使用适配器
ListView mListView = (ListView)findViewById(R.id.lv); //展示需要适配器 MyBaseAdapter myAdapter = new MyBaseAdapter(); //设置 mListView.setAdapter(myAdapter); //操作: mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //样例: //Toast.makeText(MainActivity.this,"正在为您打开"+names[position], Toast.LENGTH_SHORT).show(); } });
(3)定制界面
主函数:
class MyBaseAdapter extends BaseAdapter{ @Override public int getCount() { return names.length; } @Override public Object getItem(int position) { return names[position]; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { //将list_item 布局转换为view对象 //未优化 View view = View.inflate(MainActivity.this, R.layout.list_item, null); //找到条目的控件 ImageView imageView = (ImageView)view.findViewById(R.id.item_image); TextView mTextView = (TextView) view.findViewById(R.id.item_tv); mTextView.setText(names[position]); imageView.setBackgroundResource(icons[position]); return view;}
新建.xml:样例://新设置的界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical">
<ImageView
android:id="@+id/item_image"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_margin="8dp"
android:background="@drawable/wx" />
<TextView
android:id="@+id/item_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是ListView的Item布局"
android:textSize="18sp" />
</LinearLayout>
注:此处的names和icons分别指String集合名和图片集合。
(4)优化
将主函数中 @Override
public View getView(int position, View convertView, ViewGroup parent) {}中内容改为:
ViewHolder holder; if(convertView == null){ //为空 则给下一个 convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.list_item,null); holder = new ViewHolder(); holder.mTextView = (TextView) convertView.findViewById(R.id.item_tv); holder.imageView = (ImageView) convertView.findViewById(R.id.item_image); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } holder.mTextView.setText(names[position]); holder.imageView.setBackgroundResource(icons[position]); return convertView; } class ViewHolder{//优化时所需的类 TextView mTextView; ImageView imageView; }
10.RecyclerView
(1)基本设置
在app/build.gradle中加入:
compile'com.android.support:recyclerview-v7:24.2.1'。
(2)新建适配器
public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder>{ private List<Fruit> mFruitList; //定义内部类 static class ViewHolder extends RecyclerView.ViewHolder { View fruitView; ImageView fruitImage; TextView fruitName; //获取实例 public ViewHolder(View view) { super(view); fruitView = view; fruitImage = (ImageView) view.findViewById(R.id.fruit_image); fruitName = (TextView) view.findViewById(R.id.fruit_name); } } //将要展示的数据源传进来 public FruitAdapter(List<Fruit> fruitList) { mFruitList = fruitList; } //重写三个方法 //1.创建实例 @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item, parent, false); final ViewHolder holder = new ViewHolder(view); holder.fruitView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int position = holder.getAdapterPosition(); Fruit fruit = mFruitList.get(position); Toast.makeText(v.getContext(), "you clicked view " + fruit.getName(), Toast.LENGTH_SHORT).show(); } }); holder.fruitImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int position = holder.getAdapterPosition(); Fruit fruit = mFruitList.get(position); Toast.makeText(v.getContext(), "you clicked image " + fruit.getName(), Toast.LENGTH_SHORT).show(); } }); return holder; } //对recyclerView子项进行赋值 @Override public void onBindViewHolder(ViewHolder holder, int position) { Fruit fruit = mFruitList.get(position); holder.fruitImage.setImageResource(fruit.getImageId()); holder.fruitName.setText(fruit.getName()); } //返回数据源长度 @Override public int getItemCount() { return mFruitList.size(); } }
(3)在主函数中:
public class MainActivity extends AppCompatActivity { private List<Fruit> fruitList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initFruits();//初始化 RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recycler_view); //LinearLayoutManager时线性布局的意思 LinearLayoutManager layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); FruitAdapter adapter = new FruitAdapter(fruitList); recyclerView.setAdapter(adapter); } //创建实例,传入数据 private void initFruits() { Fruit apple = new Fruit("Apple", R.drawable.apple_pic); fruitList.add(apple); }
——内容参考《第一行代码》第二版
浙公网安备 33010602011771号