来源:
《第一行代码》第二版p121页
ListViewTest项目中ListView的点击事件
书中版本:Android studio2.2
我的版本:Android studio3.5
。
代码说明:
使用 setonItemClicklistener()方法为 Listview注册了一个监听器,
当用户点击了 List view中的任何一个子项时,就会回调 onItemclick()方法。
在这个方法中可以通过 position参数判断出用户点击的是哪一个子项,
然后获取到相应的水果,并通过 Toast将水果的名字显示出来。
。
错误:
完整代码:
package com.example.listviewtest;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
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响应点击事件
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());
}
});
}
//可以看到,我们使用 setonItemClicklistener()方法为 Listview注册了一个监听器,当
//用户点击了 List view中的任何一个子项时,就会回调 onItemclick()方法。在这个方法中可以
//通过 position参数判断出用户点击的是哪一个子项,然后获取到相应的水果,并通过 Toast将
//水果的名字显示出来。
private void initFruits(){
for(int i=0;i<2;i++){
Fruit apple = new Fruit("Apple",R.drawable.apple_pic);
fruitList.add(apple);
Fruit banana = new Fruit("banana",R.drawable.banana_pic);
fruitList.add(banana);
Fruit orange = new Fruit("orange",R.drawable.orange_pic);
fruitList.add(orange);
Fruit watermelon = new Fruit("watermelon",R.drawable.watermelon_pic);
fruitList.add(watermelon);
Fruit pear = new Fruit("pear",R.drawable.pear_pic);
fruitList.add(pear);
Fruit grape = new Fruit("grape",R.drawable.grape_pic);
fruitList.add(grape);
Fruit pineapple = new Fruit("pineapple",R.drawable.pineapple_pic);
fruitList.add(pineapple);
Fruit strawberry = new Fruit("strawberry",R.drawable.strawberry_pic);
fruitList.add(strawberry);
Fruit cherry = new Fruit("cherry",R.drawable.cherry_pic);
fruitList.add(cherry);
Fruit mango = new Fruit("mango",R.drawable.mango_pic);
fruitList.add(mango);
}
}
//可以看到,这里添加了一个 initFruits()方法,用于初始化所有的水果数据。在 Fruit类
//的构造函数中将水果的名字和对应的图片id传入,然后把创建好的对象添加到水果列表中。另
//外我们使用了一个for循环将所有的水果数据添加了两遍,这是因为如果只添加一遍的话,数据
//量还不足以充满整个屏幕。接着在 on create()方法中创建了 FruitAdapter对象,并将 Fruit
//Adapter作为适配器传递给 List view,这样定制 List view界面的任务就完成了。
public class Fruit {
private String name;
private int imageId;
public Fruit(String name,int imageId){
this.name = name;
this.imageId = imageId;
}
public String getName(){
return name;
}
public int getImageId(){
return imageId;
}
}//Fruit类中只有两个字段,name表示水果的名字, imageId表示水果对应图片的资源id
}
理论上的效果图:(点击orange,出现如图弹窗)
在线求各位大佬解惑!多谢!