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); }

 

——内容参考《第一行代码》第二版

posted @ 2021-02-22 17:42  步履向前  阅读(115)  评论(0)    收藏  举报