- 任务要求
使用ListView和自定义Adapter完成列表信息的显示
-思路
1先在Activity中静态加载一个fragment,在fragment里面操作
2在fragment中添加ListView控件
3图例所示的listView模板还要自己重新定义 所以要创建一个XML文件自定义布局 并在java中添加到listView中
4 这里我是按照要求自定义了一个Baseadapter类来传输数据到前端。
5为了使代码更简洁 我把姓名,年龄,邮箱地址等要信息打包成一个Message类,这样不用重复写代码
XML文件分三个:
1 main_activity(fragment部分)
<fragment
android:id="@+id/list_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.example.administrator.deadline5_2.ListFragment"
tools:layout="@layout/fragment_list"/>
2 fragment_list(ListView部分)
<ListView
android:id="@+id/list_item1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
3 list_item
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/txt_name"
android:hint="@string/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/txt_age"
android:hint="@string/age"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/txt_email"
android:hint="@string/email"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/txt_address"
android:hint="@string/address"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
java文件
1 Message.java
public class Message {
private String name;
private String age;
private String email;
private String address;
Message(String name,String age,String email,String address) {
this.name = "姓名: "+name;
this.age = "年龄: "+age;
this.email = "邮箱: "+email;
this.address = "地址: "+address;
}
public void setName(String name) {
this.name = name;
}
public void setAge(String age) {
this.age = age;
}
public void setEmail(String email) {
this.email = email;
}
public void setAddress(String address){
this.address = address;
}
public String getName(){
return name;
}
public String getAge(){
return age;
}
public String getEmail(){
return email;
}
public String getAddress(){
return address;
}
}
2 Messageadapter.java
public class MessageAdapter extends BaseAdapter {
private ArrayList<Message> mData;
private Context context;
MessageAdapter(ArrayList<Message> mData, Context context) {
this.mData = mData;
this.context = context;
}
@Override
public int getCount() {
return mData.size();//决定了现实多少行ListView
}
//根据ListView所在位置返回view
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if(view ==null)
{
view = LayoutInflater.from(context).inflate(R.layout.list_item,viewGroup,false);
}
//得到view中的控件
TextView txt_name = (TextView)view.findViewById(R.id.txt_name);
TextView txt_age = (TextView)view.findViewById(R.id.txt_age);
TextView txt_email = (TextView)view.findViewById(R.id.txt_email);
TextView txt_address = (TextView)view.findViewById(R.id.txt_address);
txt_name.setText(mData.get(i).getName());
txt_age.setText(mData.get(i).getAge());
txt_email.setText(mData.get(i).getEmail());
txt_address.setText(mData.get(i).getAddress());
return view ;
}
}
3ListFragment.java
public class ListFragment extends Fragment {
private List<Message> mData ;
private Context context;
private MessageAdapter mAdapter;
private ListView list_item1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_list, container, false);
context = getActivity();
mData = new ArrayList<>();
mData.add(new Message("蔡志坤","25","ffczk86@gmail.com","厦门市"));
mData.add(new Message("李杰华","25","aa@bb.com","漳州市"));
mData.add(new Message("张亮","25","cc@gmail.com","厦门市"));
mData.add(new Message("陈旭","25","ccadd@gmail.com","厦门市"));
mData.add(new Message("刘玄德","25","ffczk@gmail.com","福州市"));
mAdapter = new MessageAdapter((ArrayList<Message>)mData,context);
list_item1 = (ListView)view.findViewById(R.id.list_item1);
list_item1.setAdapter(mAdapter);
return view;
}
}
需要注意的是在写BaseAdapter时一定要重写getCount方法和getView方法
在getView方法中先把layout 转换成view 在获取里面的控件 并setText。
在ListFragment。java中设置数据创建适配器传到前端时一定要按照步骤来 否则在运行是会出现空指针异常
完成效果图