自定义布局和Llistview

1.自定义控件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.ListView(项目2019/ListviewTest)
(1)写一个item.xml的布局,作为listview中的每个子布局。
(2)建一个实体类,比如fruit类。
(3)自定义一个Adapter,继承ArrayAdapter,并重写getView方法,见代码1.

	//用这个获取当前项的fruit实例
    Fruit fruit = getItem(position);/
    /* 用这个获得listview中的每一个子布局,两种写法,都可以,我不太懂,有兴趣的小伙伴可以去研究一下。
将fruit实例中的每一个属性的值赋到view中去。*/
    view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
   
    view = LayoutInflater.from(getContext()).inflate(resourceId, null);
   

(4)在父布局中,将adapter、子布局与父布局联系起来,并为listview中的每一条加监听。见代码2

代码1:
自定义Adapter的getView的简单写法

 @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Fruit fruit = getItem(position);//获取当前项的Fruit实例
            View view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
       ImageView fruitImage = view.findViewById(R.id.fruit_image);
      TextView fruitName = view.findViewById(R.id.fruit_name);
        fruitImage.setImageResource(fruit.getImageId());
        fruitName .setText(fruit.getName());
        return view;
    }
 

自定义Adapter的getView高效率写法

  @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Fruit fruit = getItem(position);//获取当前项的Fruit实例
        View view;
        ViewHolder viewHolder;
        if(convertView==null){
            view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
            viewHolder = new ViewHolder();
            viewHolder.fruitImage =  view.findViewById(R.id.fruit_image);
            viewHolder.fruitName = view.findViewById(R.id.fruit_name);
            view.setTag(viewHolder);
        }else{
            view = convertView;
            viewHolder = (ViewHolder) view.getTag();
        }
//        ImageView fruitImage = view.findViewById(R.id.fruit_image);
//        TextView fruitName = view.findViewById(R.id.fruit_name);
        viewHolder.fruitImage.setImageResource(fruit.getImageId());
        viewHolder.fruitName.setText(fruit.getName());
        return view;
    }
    class ViewHolder {

        ImageView fruitImage;
        TextView fruitName;
    }

代码2
父布局写法:

public class MainActivity extends AppCompatActivity {
    private List<Fruit> fruitList = new ArrayList<>();
    ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initFruits();
        FruitAdapter fruitAdapter = new FruitAdapter(MainActivity.this,
                R.layout.fruit_item, fruitList);
        ListView listView = findViewById(R.id.my_list_view);
        listView.setAdapter(fruitAdapter);
        listView.setOnItemClickListener(
                new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                        Fruit fruit = fruitList.get(i);
                        Toast.makeText(MainActivity.this, fruit.getName(), Toast.LENGTH_SHORT).show();
                    }
                }

        );

    }

    private void initFruits(){
        for(int i=0;i<3;i++){
            Fruit apple = new Fruit("apple", R.drawable.ic_launcher_background);
            fruitList.add(apple);
            Fruit banana = new Fruit("banana", R.drawable.ic_launcher_background);
            fruitList.add(banana);
            Fruit grape = new Fruit("grape", R.drawable.ic_launcher_background);
            fruitList.add(grape);
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叮叮当当0543

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值