GridView
AutoCompleteTextView
Gallery
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;
}
}