listView优化

// 重写getView()方法,这个方法在每个子项被滚动到屏幕内的时候会被调用
// convertView是优化加载item布局,viewHolder 是优化item内部加载控件优化


package com.example.adapter;

public class Fruit {
    private String name;
    private int 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;
    }

    public Fruit(String name, int imageId) {
        this.name = name;
        this.imageId = imageId;
    }
}-----------------------------
package com.example.adapter;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;

import com.example.R;

import java.util.List;


public class FruitAdapter extends ArrayAdapter<Fruit> {
    public FruitAdapter(@NonNull Context context, int resource) {
        super(context, resource);
    }



//    public FruitAdapter(@NonNull Context context, int resource, @NonNull Fruit[] objects) {
//        super(context, resource, objects);
//    }
//
//    public FruitAdapter(@NonNull Context context, int resource, int textViewResourceId, @NonNull Fruit[] objects) {
//        super(context, resource, textViewResourceId, objects);
//    }
//
    private int resourceid;
    public FruitAdapter(@NonNull Context context, int resource, @NonNull List<Fruit> objects) {
        super(context, resource, objects);
        resourceid=resource;
    }
//
//    public FruitAdapter(@NonNull Context context, int resource, int textViewResourceId, @NonNull List<Fruit> objects) {
//        super(context, resource, textViewResourceId, objects);
//    }
//    重写getView()方法,这个方法在每个子项被滚动到屏幕内的时候会被调用
//     convertView是优化加载item布局,viewHolder 是优化item内部加载控件优化
      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
          Log.w("adapter","position="+position+" ");
        Fruit fruit=getItem(position);
          View view;
          ViewHolder viewHolder;
          if(convertView==null){
              Log.w("adapter","convertView==null position="+position);
              view= LayoutInflater.from(getContext()).inflate(resourceid,parent,false);
              viewHolder = new ViewHolder();
              viewHolder.fruitImage=(ImageView)view.findViewById(R.id.frui_image);
              viewHolder. tv       =(TextView)view.findViewById(R.id.frui_name);
              view.setTag(viewHolder);// 将ViewHolder存储在View中。
          }else{
              view=convertView;
              viewHolder=(ViewHolder)view.getTag(); //重新获取ViewHolder
          }
         viewHolder.fruitImage.setImageResource(fruit.getImageId());
         viewHolder.tv.setText(fruit.getName());
          return view;
      }
      class ViewHolder{
          ImageView fruitImage;
          TextView tv;
      }


}

------------------------------------------------------------------------

package com.example.adapter;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;

import com.example.R;
import com.example.base.BaseActivity;
import com.example.lifecycle.MainActivity;

import java.util.ArrayList;
import java.util.List;

public class FruitListActivity extends BaseActivity {
  private List<Fruit> fruits=new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fruit_list);
        initFruits();
    }

    private void initFruits() {
        for (int i=0;i<2;i++){

            Fruit apple=new Fruit("Apple",R.drawable.ic_launcher_foreground);
            fruits.add(apple);
            Fruit banana=new Fruit("Banana",R.drawable.ic_launcher_foreground);
            fruits.add(banana);
            Fruit orange=new Fruit("Orange",R.drawable.ic_launcher_foreground);
            fruits.add(orange);
            Fruit grape=new Fruit("Grape",R.drawable.ic_launcher_foreground);
            fruits.add(grape);
            Fruit mango=new Fruit("Mango",R.drawable.ic_launcher_foreground);
            fruits.add(mango);
         }
        FruitAdapter adapter= new FruitAdapter(FruitListActivity.this,
                R.layout.list_item,fruits);
        ListView listView=(ListView)findViewById(R.id.listView);
        listView.setAdapter(adapter);
    }
}

------------------------------------------------------------------------------------------

activity_fruit_list

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.adapter.FruitListActivity">
<ListView
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"></ListView>
</androidx.constraintlayout.widget.ConstraintLayout>

 

---------------

list_item

<?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="wrap_content">
<ImageView
    android:id="@+id/frui_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"></ImageView>
<TextView
     android:id="@+id/frui_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginLeft="10dp"></TextView>
</LinearLayout>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值