个人登录
数狐在线-做最好的在线学习社区java c# liferay jsp
如何定制android下的listview 列表组件?
    2017-8-18    作者:  androidFan      进入评论页
实现的过程,大概需要经过如下的步骤:
一,首先需要定义数组,包括字符串数组与图片数组,编辑strings.xml


二,生成一个RowItem类,来表示列表组件内的行记录

大家可以发现,就是一个简单的java bean风格的类。

三,定义列表adapter,这个adapter比较重要,是完成具体数据控制的类


该类,重写了三个方法,分别是:getItem(int postion)  - 该方法会返回行记录对象
getItemId(int position) - 该方法则返回行记录的id,可以看作数据库表里的主键字段,为后续查询特定行记录做准备。
这里最关键的是声明了一个ViewHolder的内部类,而且仅仅包含页面组件对象,没有方法,相当页面组件容器,在后面的方法内getView(int position, View cView, ViewGroup parent)进行调用:
      LayoutInflater minflater=(LayoutInflater)context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
上面的语句比较关键,通过获取minflater对象,我们就可以通过绑定之前定义的列表布局配置文件,生成View对象了

  cView=minflater.inflate(R.layout.list_item,null);

   我们对holder里的组件首先进行的是初始化,通过调用:
    holder.des_about=(TextView)cView.findViewById(R.id.textView4);
    holder.title_pic=(ImageView)cView.findViewById(R.id.imageView);

    然后通过调用行记录里的内容,进行贴数据:
             RowItem row_pos=rowItem.get(position);
            holder.des_about.setText(row_pos.getDescription());
            holder.title_pic.setImageResource(row_pos.getTitleName());

    最后是返回view对象:   cView.setTag(holder);   return cView;

    而当cView非空的情况下,处理则简单:  holder=(ViewHolder)cView.getTag();

四,对activity的java文件进行编码

     4.1声明变量:
    String[] member_names;
TypedArray profile_pics;
List<RowItem> rowItems;
ListView mylistview;
    这里的member_names - 对应字符串数组
   profile_pics - 则对应图片数组

   rowItems - 行记录集

   4.2 对变量进行初始化:

      rowItems = new ArrayList<RowItem>();
member_names = getResources().getStringArray(R.array.titleList);
profile_pics = getResources().obtainTypedArray(R.array.pics);

for (int i = 0; i < member_names.length; i++) {
RowItem item = new RowItem(profile_pics.getResourceId(i, -1),member_names[i]);
rowItems.add(item);
}
mylistview = (ListView) findViewById(R.id.arcA);

  4.3 贴listview到activity页面

  CustomAdapter adapter = new CustomAdapter(this, rowItems);
mylistview.setAdapter(adapter);

mylistview.setOnItemClickListener(this);
这里的setOnItemClickListener(this ) - 是对单击的处理,因为主activity文件,是这样声明的:

public class TopNewsReporter extends AppCompatActivity implements OnItemClickListener {
因此我们需要实现:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {

String member_name = rowItems.get(position).getDescription();
Toast.makeText(getApplicationContext(), "" + member_name,
Toast.LENGTH_SHORT).show();
Intent intentOne=new Intent(getBaseContext(),NextActivity.class);
startActivity(intentOne);

}


通过以上的步骤,我们就生成了一个自定义的listview页面组件,上面是图片,下面是图片说明,当用户单击的时候
调用新的页面新的activity对象。





官方微信服务号
进入评论页
合作企业