ListView的点击事件

首先自定义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的点击事件来实现相应的点击效果

猜你喜欢

转载自blog.csdn.net/nofeshion/article/details/80383810