安卓第三周实验03

  1. 通过ListView与适配器ArrayAdapter的搭配使用,实现以下界面的显示效果(ListView每个子项分别包括地球、金木水火土星的图片和名称以及介绍,图片和介绍请自行查找),另外实现ListView子项的点击事件,点了之后,会出现消息提示框,提示该行星的名称。
    运行截图:实验三

首先是布局文件:activity_main.xml

<?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=".MainActivity">

    <ListView
        android:id="@+id/List_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
        

然后是布局文件fruit_item.xml

<?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=".MainActivity">

    <ListView
        android:id="@+id/List_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>


</androidx.constraintlayout.widget.ConstraintLayout>

然后新建一个实体类Fruit作为适配器的适配类型

public class Fruit {
    private  String name;
    public  int imageId;
    private  String exp;
    public Fruit(String name, int imageId,String exp){
        this.imageId=imageId;
        this.name=name;
        this.exp=exp;
    }

    public int getImageId() {
        return imageId;
    }

    public String getName() {
        return name;
    }

    public String getExp() {
        return exp;
    }
}

然后建立一个一个自定义的适配器,这个适配器继承自 ArrayAdapter,并将泛型指定为Fruit 类。新建类 FruitAdapter,代码如下所示:

import android.content.Context;
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 java.util.List;

public class FruitAdapter  extends ArrayAdapter<Fruit> {
    private int resourceId;
    public FruitAdapter(Context context, int textViewResourceId, List<Fruit>objects)
    {
        super(context,textViewResourceId,objects);
        resourceId=textViewResourceId;
    }
    @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 = (ImageView) view.findViewById(R.id.fruit_image);
        TextView fruitName = (TextView) view.findViewById(R.id.fruit_name);
        TextView fruitexp=(TextView) view.findViewById(R.id.fruit_exp);
        fruitName.setText(fruit.getName());
        fruitImage.setImageResource(fruit.getImageId());
        fruitexp.setText(fruit.getExp());
        return view;
    }


}

最后修改mainactivity代码并且建立监听器来显示点击的内容:

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(); //
        FruitAdapter adapter = new FruitAdapter(MainActivity.this,
                R.layout.fruit_item, fruitList);

        ListView listView = (ListView) findViewById(R.id.List_view);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
                public  void onItemClick(AdapterView<?>parent, View view,int position,long id){
                Fruit fruit =fruitList.get(position);
                Toast.makeText(MainActivity.this,fruit.getName(),Toast.LENGTH_SHORT).show();
        }

        });
}

private void initFruits() {
        for (int i = 0; i < 2; i++){
                Fruit huoxing = new Fruit("火星", R.drawable.huoxing,"为距太阳第四远,也是太阳系中第七大行星,在中国古代又称荧火,因为火星呈红色,荧荧像火,亮度常有变化;而且在天空中运动,有时从西向东,有时又从东向西,情况复杂,令人迷惑,所以中国古代叫它“荧惑”,有“荧荧火光,离离乱惑。”之意。");
        fruitList.add(huoxing);
        Fruit muxing = new Fruit("木星", R.drawable.muxing,"木星是离太阳第五颗行星,中国古代称为岁星,因为他公转一周正好是12年,也就是一地支,木星是太阳系行星中质量最大的一颗,它的质量是所有其他的7颗行星的总和的2.5倍,或是地球的318倍,体积为地球的1316倍,由于它巨大的体积,人们不用望远镜就可以看到它,木星被称为“太阳系行星之王”。它拥有着全太阳系中最快的自转速度。");
        fruitList.add(muxing);
        Fruit diqiu = new Fruit("地球", R.drawable.diqiu,"地球是距太阳第三颗,也是太阳系第五大行星,地球是太阳系中密度最大的行星。地球,当然不需要飞行器即可被观测,然而我们直到二十世纪才有了整个行星的地图。由空间拍到的图片应具有合理的重要性;举例来说,它们大大帮助了气象预报及暴风雨跟踪预报。");
        fruitList.add(diqiu);
        Fruit jinxing = new Fruit("金星", R.drawable.jingxing,"太阳系中第六大行星,太阳系中温度最高的行星,中国古代称之为太白或太白金星。它有时是晨星,黎明出现于东方天空,被称为“启明”;有时又是昏星,黄昏后出现西方天空,被称为“长庚”。");
        fruitList.add(jinxing);

        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值