【安卓开发】使用adapter实现对Listview的点击效果

108 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

list.xml布局构思

  • 总体是垂直的线性布局,并且需要加上android:descendantFocusability="blocksDescendants"来夺取焦点
  • 主要为了实现点击list内的每一项以及点击按钮都有不同的反应
  • 里面放一个textview做标题,一个listview即可

bg.xml

  • 作为Listview每一项的格式,总体是水平(横向)的线性布局
  • 博主往这里面放了1个imageview,1个垂直线性布局里面2个textview,1个按钮

设计效果图

在这里插入图片描述

Myadapter.java

  • 首先自定义适配器MyAdapter,并且继承SimpleAdapter
  • 定义上下文对象context

public class MyAdapter extends SimpleAdapter {

    Context context;
    public MyAdapter(Context context, List<?extends Map<String,?>> data, int resource, String[] from,
                     int[] to) {
        super(context,data,resource,from,to);
        this.context = context;
    }

    @Override
    public View getView(final int i, View convertView, ViewGroup viewGroup) {
        View view = super.getView(i, convertView, viewGroup);
        final Button btn = (Button) view.findViewById(R.id.baomingbtn);
        btn.setTag(i);//设置标签
        btn.setOnClickListener(new View.OnClickListener() {
            Intent intent = new Intent();
            @Override
            public void onClick(View v) {
                switch ((Integer) v.getTag()) {
                    case 0:
                        intent.setClass(context,info.class);
                        context.startActivity(intent);
                        break;
                    case 1:
                        intent.setClass(context,info.class);
                        context.startActivity(intent);
                        break;
                    case 2:
                        intent.setClass(context,info.class);
                        context.startActivity(intent);
                        break;
                    case 3:
                        intent.setClass(context,info.class);
                        context.startActivity(intent);
                        break;
                    case 4:
                        intent.setClass(context,info.class);
                        context.startActivity(intent);
                        break;
                    case 5:
                        intent.setClass(context,info.class);
                        context.startActivity(intent);
                        break;
                    case 6:
                        intent.setClass(context,info.class);
                        context.startActivity(intent);
                        break;
                }
            }
        });
        return view;
    }
}

list.java

  • 定义整型数组存放图片
public class list extends AppCompatActivity {

    private ListView listview;

    String[] items = new String[]{"英语四级","英语六级","成人高考","在职研究生考试","在职博士生","在职博士后"};

    String[] tishiyu = new String[]{"已报名552509人","已报名367908人","已报名65246人","已报名98674人","已报名12312人","已报名7873人"};

    int images[] = new int[]{R.drawable.cet4,R.drawable.cet6,R.drawable.chengrengaokao,R.drawable.yanjiusheng,R.drawable.boshi,R.drawable.boshihou};

    private ArrayList<Map<String, Object>> list;
    private MyAdapter adapter;
    private ImageView imageview;
    private String photos = String.valueOf(images);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list);
        exit.getInstance().addActivity(this);
    }
        //0.抽取列表视图
        listview = (ListView) findViewById(R.id.listView);
        imageview = (ImageView) findViewById(R.id.imageView);

        ////1.实现list中具体的数据
        list = new ArrayList<>();
        for (int i=0;i<items.length;i++){

            Map<String,Object> map = new HashMap<>();
            map.put("001图片",images[i]);
            map.put("002文字",items[i]);
            map.put("003提示语",tishiyu[i]);
            list.add(map);

        }
        ////////////2.设计布局文件
        adapter = new MyAdapter(this, list, R.layout.bg, new String[]{"001图片", "002文字","003提示语"}
                , new int[]{imageView, R.id.textView,R.id.textView2});

        //////////3.设置adapter适配器
        listview.setAdapter(adapter);

        listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int i, long l) {
                Toast.makeText(getApplicationContext(),items[i],Toast.LENGTH_SHORT).show();
            }
        });
    }
}