8/26/GridView/AutoCompleteTextView/Gallery/Spinner/ExpandableListView

本文详细介绍了在Android应用开发中如何使用GridView、AutoCompleteTextView、Gallery、Spinner和ExpandableListView等常见UI组件,并提供了实现这些组件的具体代码示例。包括GridView的网格显示实现、AutoCompleteTextView的提示输入功能、Gallery的横向浏览方式、Spinner的下拉菜单显示以及ExpandableListView的嵌套列表展示。每种组件的实现步骤都进行了详细的说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GridView

AutoCompleteTextView

Spinner

ExpandableListView

GridView显示方式是网格显示,实现方法和ListView基本相同

一:实现GridView的方法步骤
1.在一个布局上创建一个GridView,添加上id
2.创建一个新的布局,用于数据显示的格式
3.创建一个数据Class,添加数据类型,同时构建构造器
4.创建一个Class继承于BaseAdapter,内容填写方式和方法和ListView一样,就不再赘述,
5.在主要的Activity中,通过id找到gridview通过一个方法传入数据,通过getInflater来得到LyaoutInflater然后GridView通过setAdapter来set创建的Adapter


AutoCompleteTextView显示的是通过从键盘输入然后提示所拥有的对象,然后选择对象

实现AutoCompleteTextView的方法:
1.创建一个新的model
2.在Activity_main布局中添加一个AutoCompleteTextView
3.在Activity中写下如下代码:

public class MainActivity extends AppCompatActivity {
    private String[] mData={"layout_linear","layout_frame","layout_relative","view_image","view_button","view_text","view_edittext",};
    private AutoCompleteTextView mAutoCompleteTextView;
    private ArrayAdapter<String> mArrayAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mAutoCompleteTextView= (AutoCompleteTextView) findViewById(R.id.auto_complete);
        mArrayAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,mData);
        mAutoCompleteTextView.setAdapter(mArrayAdapter);
    }

Gallery是已经过时的显示方式,他是横向浏览,向左或向右滑动可以观看到隐藏的图片

1.Gallery的实现方法和ListView的实现方法相同,不同的是创建时所创建的View类别不同(ListView是ListView而Gallery是Gallery),实现方法不再赘述


Spinner是下拉菜单式的显示方式

Spinner的实现方式为:
1.创建一个新的model
2.在Activity_main布局中添加一个Spinner
3.在Activity中写下如下代码:

public class MainActivity extends AppCompatActivity {
    private String[] mData={"layout_linear","layout_frame","layout_relative","view_image","view_button","view_text","view_edittext",};
    private ArrayAdapter<String> mArrayAdapter;
    private Spinner mSpinner;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mSpinner= (Spinner) findViewById(R.id.spinner);
        mArrayAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,mData);
        mSpinner.setAdapter(mArrayAdapter);
    }

ExpandableListView相当于一个ListView中嵌套另一个ListView

实现ExpandableListView的方法步骤是:
1.重新创建一个model
2.在一个layout中创建一个ExpandableListView
3.创建2个新的Layout布局,一个是主要的ListView(在屏幕中显示的View)另一个是嵌套进去的ListView(通过点击才可以展开的View)
4.创建一个包命名为model下面放入一个Class专门放置数据,但是需要创建两组数据,例如一个(student类和一个clazz类)由于这两组数据是嵌套关系,比如student类是嵌套在clazz里面的类,那么在clazz类中就应该包含有student类,这样才可以通过clazz类调用student类实现数据之间的嵌套
5.创建一个包命名为Adapter下面创建一个Adapter继承于BaseExpandableListAdapter,重写里面的所有方法,两个重要的方法是getGroupView和getChildView,里面的内容和ListView写的内容是一样的再次就不再赘述
6.在Activity中封装数据时,一定要将student类中的数据添加到Clazz类中,否则的话实现不了功能。
7.实现代码如下:
MainActivity:


public class MainActivity extends AppCompatActivity {
    private ExpandableListView mEListView;
    private List<Clazz>  mClazzs;
    private LayoutInflater mInflater;
    private ExpandableAdapter mAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mEListView= (ExpandableListView) findViewById(R.id.expandablelistview);
        initData();
        mInflater=getLayoutInflater();
        mAdapter=new ExpandableAdapter(mClazzs,mInflater);
        mEListView.setAdapter(mAdapter);

    }

    private void initData() {
        mClazzs=new ArrayList<>();
        Clazz clazz1=new Clazz("一班","201501");
        List<Student> student1=new ArrayList<>();
        student1.add(new Student("张三","18","男"));
        student1.add(new Student("李四","18","男"));
        student1.add(new Student("王五","18","男"));
        student1.add(new Student("赵六","18","男"));
        clazz1.setStudent(student1);
        Clazz clazz2=new Clazz("二班","201502");
        List<Student> student2=new ArrayList<>();
        student2.add(new Student("张三","18","男"));
        student2.add(new Student("李四","18","男"));
        student2.add(new Student("王五","18","男"));
        student2.add(new Student("赵六","18","男"));
        clazz2.setStudent(student2);
        Clazz clazz3=new Clazz("三班","201503");
        List<Student> student3=new ArrayList<>();
        student3.add(new Student("张三","18","男"));
        student3.add(new Student("李四","18","男"));
        student3.add(new Student("王五","18","男"));
        student3.add(new Student("赵六","18","男"));
        clazz3.setStudent(student3);
        Clazz clazz4=new Clazz("四班","201504");
        List<Student> student4=new ArrayList<>();
        student4.add(new Student("张三","18","男"));
        student4.add(new Student("李四","18","男"));
        student4.add(new Student("王五","18","男"));
        student4.add(new Student("赵六","18","男"));
        clazz4.setStudent(student4);
        mClazzs.add(clazz1);
        mClazzs.add(clazz2);
        mClazzs.add(clazz3);
        mClazzs.add(clazz4);
    }

Adapter:

public class ExpandableAdapter extends BaseExpandableListAdapter {
    private List<Clazz> mClazzs;
    private LayoutInflater mInflater;

    public ExpandableAdapter(List<Clazz> mClazzs, LayoutInflater mInflater) {
        this.mClazzs = mClazzs;
        this.mInflater = mInflater;
    }

    @Override
    public int getGroupCount() {
        return mClazzs.size();
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return mClazzs.get(groupPosition).getStudent().size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return groupPosition;
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        ClazzViewHolder clazzVH=null;
        if(convertView==null){
            convertView=mInflater.inflate(R.layout.item_clazz,null);
            clazzVH=new ClazzViewHolder();
            clazzVH.textViewClazzName= (TextView) convertView.findViewById(R.id.textview_clazz_name);
            clazzVH.textViewClazzNum= (TextView) convertView.findViewById(R.id.textview_clazz_num);
            clazzVH.textViewClazzStudents= (TextView) convertView.findViewById(R.id.textview_clazz_students);
            convertView.setTag(clazzVH);
        }else{
            clazzVH= (ClazzViewHolder) convertView.getTag();
        }
        Clazz clazz=mClazzs.get(groupPosition);
        clazzVH.textViewClazzName.setText(clazz.getClazz());
        clazzVH.textViewClazzNum.setText(clazz.getNum());
        clazzVH.textViewClazzStudents.setText(""+clazz.getStudent().size());
        return convertView;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        StudentViewHolder studentVH=null;
        if(convertView==null){
            convertView=mInflater.inflate(R.layout.item_student,null);
            studentVH=new StudentViewHolder();
            studentVH.textViewStudentName= (TextView) convertView.findViewById(R.id.textview_student_name);
            studentVH.textViewStudentAge= (TextView) convertView.findViewById(R.id.textview_student_age);
            studentVH.textViewStudentSex= (TextView) convertView.findViewById(R.id.textview_student_sex);
            convertView.setTag(studentVH);
        }else{
            studentVH= (StudentViewHolder) convertView.getTag();
        }
        Student student=mClazzs.get(groupPosition).getStudent().get(childPosition);
        studentVH.textViewStudentName.setText(student.getName());
        studentVH.textViewStudentAge.setText(student.getAge());
        studentVH.textViewStudentSex.setText(student.getSex());
        return convertView;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return false;
    }
    class ClazzViewHolder{
        TextView textViewClazzName;
        TextView textViewClazzNum;
        TextView textViewClazzStudents;
    }
    class StudentViewHolder{
        TextView textViewStudentName;
        TextView textViewStudentAge;
        TextView textViewStudentSex;
    }
}

XML文档:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <ExpandableListView
        android:id="@+id/expandablelistview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></ExpandableListView>
</RelativeLayout>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_vertical"
    android:paddingLeft="35dp"
    android:background="#220000ff">
    <TextView
        android:id="@+id/textview_clazz_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    <TextView
        android:id="@+id/textview_clazz_num"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/textview_clazz_students"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#660000ff"
    android:gravity="center_vertical">
    <TextView
        android:id="@+id/textview_student_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/textview_student_age"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/textview_student_sex"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

数据类:

public class Clazz {
    private String clazz;
    private String num;
    private List<Student> Student;

    public Clazz(String clazz, String num) {
        this.clazz = clazz;
        this.num = num;
    }

    public List<com.my.expandablelistviewtest.model.Student> getStudent() {
        return Student;
    }

    public void setStudent(List<com.my.expandablelistviewtest.model.Student> student) {
        Student = student;
    }

    public String getClazz() {
        return clazz;
    }

    public void setClazz(String clazz) {
        this.clazz = clazz;
    }

    public String getNum() {
        return num;
    }

    public void setNum(String num) {
        this.num = num;
    }
}


public class Student {
    private String name;
    private String age;
    private String sex;

    public Student(String name, String age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值