安卓开发---07 Android列表组件训练

  • Spinner 下拉框
  • ListView 列表
  • Adapter自定义 适配器
  • GridView 网格视图

1.spinner下拉框

  • 创建string-array加载数据
    在res文件夹下创建array.xml
<string-array name="sp">
        <item>ps</item>
        <item>h5</item> 
</string-array>
<Spinner
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:spinnerMode="dialog|dropdown"
           android:entries="@array/sp"


 android:spinnerMode="dialog"表示Spinner的样式是dialog
 android:prompt可以设置dialog的标题(注意必须在string资源下引用,
 不然程序会崩掉)      ></Spinner>

监听函数:setOnItemSelectedListener
获取值函数:getSelectedItem()

  • 通过适配器来填充参数
    编写myadapter适配器继承baseadapter 关键的getView方法
@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater=LayoutInflater.from(context);
        View v=inflater.inflate(R.layout.sp_layout,null);
            TextView pername=v.findViewById(R.id.pername);
            TextView perage=v.findViewById(R.id.perage);
            pername.setText(list.get(position).getName());
            perage.setText(list.get(position).getAge()+"");
        return v;
}

主界面:

sp = findViewById(R.id.sp);
        List<Person> pers=new ArrayList<Person>(); //准备数据
        pers.add(new Person("小红",10));
        pers.add(new Person("小明",12));
        pers.add(new Person("小军",13));
        MyAdapter myAdapter=new MyAdapter(pers,this);//准备适配器
        sp.setAdapter(myAdapter);

2.ListView 列表及adapter适配器

  • Android自带的适配器
private String data[] =
 {"aa","bb","cc","dd","aa","bb","cc","dd","aa","bb","cc","dd","aa","bb","cc","dd"};//假数据
ListView listView = (ListView) findViewById(R.id.listview);//在视图中找到ListView
        ArrayAdapter<String> adapter 
= new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);//新建并配置ArrayAapeter
        listView.setAdapter(adapter);

  • 自定义适配器 继承于baseadapter
@Override
    public int getCount() {//数据长度
        return list.size();
    }
    @Override
    public Object getItem(int position) { //某一个数据是什么
        return list.get(position);
    }
    @Override
    public long getItemId(int position) { //当前的数据索引
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater=LayoutInflater.from(context);
        View v=inflater.inflate(R.layout.sp_layout,null);
            TextView pername=v.findViewById(R.id.pername);
            TextView perage=v.findViewById(R.id.perage);
            pername.setText(list.get(position).getName());
            perage.setText(list.get(position).getAge()+"");
        return v;
}

适配优化viewholder

if (convertView == null) {  
viewHolder = new ViewHolder();  
convertView = LayoutInflater.from(mContext).inflate(R.layout.item,  null);  
            viewHolder.bt1 = (Button) convertView.findViewById(R.id.bt1);  
            viewHolder.bt2 = (Button) convertView.findViewById(R.id.bt2);  
            viewHolder.tv = (TextView) convertView.findViewById(R.id.tv);  
            convertView.setTag(viewHolder);  
        } else {  
            viewHolder = (ViewHolder) convertView.getTag();  
        }  
        //绑定数据
        return convertView;  
    }  

Listview 点击事件setOnItemClickListener
及长按事件setOnItemLongClickListener 返回true可以拦截点击事件

interface InnerItemOnclickListener {
        void itemClick(View v);
}

private InnerItemOnclickListener mListener;  
写一个InnerItem的监听方法
public void setOnInnerItemOnClickListener(InnerItemOnclickListener listener){  
        this.mListener=listener;  
}  

在绑定数据的同时给btn添加点击事件

viewHolder.bt1.setOnClickListener(this);  
        viewHolder.bt2.setOnClickListener(this);  

原生的点击事件实现监听

@Override  
    public void onClick(View v) {  
        mListener.itemClick(v);  
    } 

在activity界面;
实现 InnerItemOnclickListener接口

 mAdapter.setOnInnerItemOnClickListener(this);  

public void itemClick(View v) {  
        int position;  
        position = (Integer) v.getTag();  
        switch (v.getId()) {  
        case R.id.bt1:  
            Log.e("内部item--1-->", position + "");  
            break;  
        case R.id.bt2:  
            Log.e("内部item--2-->", position + "");  
            break;  
        default:  
            break;  
        }  

@Override  
    public void onItemClick(AdapterView<?> parent, View view, int position,  
            long id) {  
        Log.e("整体item----->", position + "");  
    }  

3.Gridview网格视图

android:numColumns=”auto_fit” //GridView的列数设自动,也可填数字
android:columnWidth=”90dp " //每列的宽度,也就是Item的宽度
android:stretchMode=”columnWidth"//缩放与列宽大小同步
android:verticalSpacing=”10dp” //两行之间的边距
android:horizontalSpacing=”10dp” //两列之间的边距
android:cacheColorHint="#00000000" //去除拖动时默认的黑色背景
android:listSelector="#00000000" //去除选中时的黄色底色
android:scrollbars=“none” //隐藏GridView的滚动条
android:fadeScrollbars=“true” //设置为true就可以实现滚动条的自动隐藏和显示
android:fastScrollEnabled=“true” //GridView出现快速滚动的按钮(至少滚动4页才会显示)

整体用法和Listview类似, 注意加粗的三个属性

发布了15 篇原创文章 · 获赞 11 · 访问量 1310

猜你喜欢

转载自blog.csdn.net/qq_44534541/article/details/105460330