自定义adapter完成列表的显示

  • 任务要求
    使用ListView和自定义Adapter完成列表信息的显示

-思路
1先在Activity中静态加载一个fragment,在fragment里面操做
2在fragment中添加ListView控件
3图例所示的listView模板还要本身从新定义 因此要建立一个XML文件自定义布局 并在java中添加到listView中
4 这里我是按照要求自定义了一个Baseadapter类来传输数据到前端。
5为了使代码更简洁 我把姓名,年龄,邮箱地址等要信息打包成一个Message类,这样不用重复写代码javascript

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部分)java

<ListView
        android:id="@+id/list_item1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

3 list_itemandroid

<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文件ide

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.javathis

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中设置数据建立适配器传到前端时必定要按照步骤来 不然在运行是会出现空指针异常code

完成效果图
blog

相关文章
相关标签/搜索