首先自定义Adapter适配器:
public class FruitAdapter extends ArrayAdapter<Fruit> { private static final String TAG = "FruitAdapter"; private int itemResourceId; public FruitAdapter(@NonNull Context context, int resource, @NonNull List<Fruit> objects) { super(context, resource, objects); itemResourceId = resource; } @NonNull @Override public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { Log.d(TAG, "getView: ==================="); Fruit fruit = getItem(position); // 获取当前项的Fruit实例 View inflate; final ViewHolder viewHolder; if (null == convertView) { inflate = LayoutInflater.from(getContext()).inflate(itemResourceId, parent, false); viewHolder = new ViewHolder(); viewHolder.ll_fruit_item = (LinearLayout) inflate.findViewById(R.id.ll_fruit_item); viewHolder.fruitImage = (ImageView) inflate.findViewById(R.id.fruit_image); viewHolder.fruitName = (TextView) inflate.findViewById(R.id.fruit_name); inflate.setTag(viewHolder); } else { inflate = convertView; viewHolder = (ViewHolder) inflate.getTag(); } // 方式三 // viewHolder.ll_fruit_item.setOnClickListener(new View.OnClickListener() { // @Override // public void onClick(View v) { // Toast.makeText(getContext(), viewHolder.fruitName.getText().toString(), Toast.LENGTH_SHORT).show(); // } // }); viewHolder.fruitImage.setImageResource(fruit.getImageId()); viewHolder.fruitName.setText(fruit.getName()); return inflate; } class ViewHolder { LinearLayout ll_fruit_item; ImageView fruitImage; TextView fruitName; } }
然后查找到ListView控件并把构建好的适配器对象传递进去
public class ListViewActivity extends AppCompatActivity { private static final String TAG = "ListViewActivity"; private ListView fruitList; private List<Fruit> fruits = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list_view); initFruits(); fruitList = (ListView) findViewById(R.id.lv_fruit); final FruitAdapter fruitAdapter = new FruitAdapter(ListViewActivity.this, R.layout.fruit_item, fruits); fruitList.setAdapter(fruitAdapter); fruitList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 方式一 // String fruitName = fruitAdapter.getItem(position).getName(); // Toast.makeText(ListViewActivity.this, fruitName, Toast.LENGTH_SHORT).show(); // 方式二 FruitAdapter.ViewHolder viewHolder = (FruitAdapter.ViewHolder) view.getTag(); Toast.makeText(ListViewActivity.this, viewHolder.fruitName.getText().toString(), Toast.LENGTH_SHORT).show(); } }); } private void initFruits() {...} }
方式一:通过ListView的
setOnItemClickListener()
方法来实现,然后通过适配器对象的getItem()方法,将position参数传进去来获取到实际点击到的条目,然后再通过相关的方法来获取到想获取的数据
方式二:也是通过ListView的setOnItemClickListener()方法来实现的,然后通过获取到适配器里自定义的ViewHolder容器,再通过容器里定义的变量来获取实际想获取的数据
方式三:通过在自定义的适配器里来查找到ListView的Item条目控件,然后通过给其设置view的点击事件来实现相应的点击效果