使用ListView和自定义Adapter完成列表信息显示
完成此项任务我们应该想象到在布局方面应该有三块需要做到:从大到小说起,1、显示此列表的主界面2、在主界面一行一行显示3、在一行上显示的格式
下面根据上面的想法完成以上三种页面布局
1、显示此列表主界面
效果可以为:
2、在主界面上一行一行的显示
效果可以为:
3、在一行上显示的格式
效果为:
java代码要有主Java程序和Fragment来加载数据
首先创一个AdapterFragment用来加载数据
public class AdapterFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { View view =inflater.inflate(R.layout.fragment_adapter,container,false); Listdatas = new ArrayList<>(); datas.add(new NameMessage(R.mipmap.ic_launcher,"蔡志坤","25","aa@11.cn","厦门市")); datas.add(new NameMessage(R.mipmap.ic_launcher,"李杰华","25","bb@22.cn","漳州市")); datas.add(new NameMessage(R.mipmap.ic_launcher,"张亮","25","cc@33.cn","厦门市")); datas.add(new NameMessage(R.mipmap.ic_launcher,"陈旭","25","dd@44.cn","厦门市")); datas.add(new NameMessage(R.mipmap.ic_launcher,"刘玄德","25","ee@55.cn","福州市")); MessageAsapter adapter = new MessageAsapter(getActivity(), datas); //将数据加载到listView ListView listView = (ListView) view.findViewById(R.id.list_view); listView.setAdapter(adapter); return view; }}
为以上数据创建一个对象组
public class NameMessage { private String name; private String age; private String email; private String dizhi; private int imgId; public NameMessage( int imgId,String name, String age, String email, String dizhi) { this.name = name; this.age = age; this.email = email; this.dizhi = dizhi; this.imgId = imgId; } 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 getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getDizhi() { return dizhi; } public void setDizhi(String dizhi) { this.dizhi = dizhi; } public int getImgId() { return imgId; } public void setImgId(int imgId) { this.imgId = imgId; }}
获取数据中的每个控件对象以及为每个控件赋值
```public class MessageAsapter extends BaseAdapter {
private List datas; private Context context; public MessageAsapter(Context context,List datas) { this.datas = datas; this.context = context; } @Override public int getCount() { return datas.size(); }@Overridepublic Object getItem(int i) { return datas.get(i);}@Overridepublic long getItemId(int i) { return i;}@Overridepublic View getView(int i, View view, ViewGroup viewGroup) { if(view == null){ view = LayoutInflater.from(context).inflate(R.layout.item,null); } //2、获取View中的每个控件的对象 ImageView img = (ImageView)view.findViewById(R.id.img); TextView name =(TextView) view.findViewById(R.id.name); TextView age = (TextView)view.findViewById(R.id.age); TextView email = (TextView)view.findViewById(R.id.email); TextView dizhi = (TextView)view.findViewById(R.id.dizhi); //3、给View中的每个控件赋值 NameMessage namemessage = datas.get(i); img.setImageResource(namemessage.getImgId()); name.setText(namemessage.getName()); age.setText(namemessage.getAge()); email.setText(namemessage.getEmail()); dizhi.setText(namemessage.getDizhi()); return view;}
}
***主界面的Java程序显示***
public class ListViewActivity extends AppCompatActivity {private Fragment adapterFragment;private FragmentTransaction transction;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list_view); FragmentManager manager = getFragmentManager() ; transction = manager.beginTransaction(); if(adapterFragment ==null){ adapterFragment = new AdapterFragment(); transction.add(R.id.show,adapterFragment); } transction.replace(R.id.show,adapterFragment); transction.commit();}
```
最后的成品为:
在做这个的时候应该弄清楚逻辑,每个界面之间的关系,以及比例的分配,接着就是在Java代码中实现他需要做的,大概就可以解决了