如何创建我的上面的listview看起来更专业?
有人能告诉我,我应该如何创建类似[here] [1]的listview。
问题:如何在我的代码中实现具有图标,文件名和文件大小的外观和感觉,同时在每个文件对象上看起来干净简单,如链接中的示例所示[这里] [2] ??
有人可以指导这件事,因为我是android / java的新手…谢谢
有关如何实现自定义列表视图的信息,请参阅以下URL
更新
public static class VideoInfo { public String name = ""; public String size= ""; public String path = "";//add any more variables of which you want info }
然后你在哪里创建arraylist即getVideoFiles()
创建这个类的对象Declare ArrayList
private void getVideoFiles(File[] videoList) { videoItems = new ArrayList(); for (int i = 0; i < videolist.length; i++) { File mfile = videoList[i]; String path = mfile.getPath(); path = path.substring(path.lastIndexOf("/", path.indexOf(".")); VideoInfo model = new VideoInfo(); model.name = path; model.size = mfile.length(); videoItems.add(model); } setListAdapter(new ListViewAdapter(this, R.layout.row, videoItems)); }
现在在您的适配器中传递arraylist的这个对象以及如何在listview中设置变量已在上面的链接中给出
问题2:为什么我的listview在目录为空时有错误,尽管有这个来处理我的xml中的“空”
你记得列出你的名单吗?:
@id/android:list
如果你能够进一步帮助请清除问题1 ,那么它更清晰简洁你想要的东西。
UPDATE
列表视图的ID应为: @id/android:list
texview的ID应该是: @id/android:empty
您尚未创建自定义适配器以将布局合并到代码列表视图中。 这是你可以使用的东西
private class ListViewAdapter extends ArrayAdapter
希望这可以提供帮助。
首先创建要为列表中的每一行显示的布局,然后将BaseAdapter类扩展为自定义列表。 此类包含getView方法,可以根据需要多次复制列表中的行。
class HighScoreAdapter扩展BaseAdapter {/ * layout inflater以将您的XML布局转换为View以在每行列表中呈现。* / private LayoutInflater minflator = LayoutInflater.from(HighScoreList.this); ViewHolder持有人;
@Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } boolean toRemove = false; @Override public View getView(int position, View convertView, ViewGroup parent) { /* first time is null */ if (convertView == null ) { convertView = minflator.inflate(R.layout.highscorelist, null); holder = new ViewHolder(); holder.rank = (TextView) convertView.findViewById(R.id.user_id); holder.username = (EditText) convertView.findViewById(R.id.user_nameedit); holder.time = (TextView) convertView.findViewById(R.id.user_time); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.rank.setText(String.valueOf(position+1)+"."); /* returns the view for next row as layout will be same ie this increases the your list's scrolling and working faster even though your list contains thousands of Entry*/ return convertView; } /* this class is to make reference to your child views of your layout by using this you can set your child views properties and Listeners acording to your need.*/ class ViewHolder { TextView rank; EditText username; TextView time; } }
我希望这完全解决你的问题.. 🙂
将此方法添加到您的代码中,如果您收到任何错误或exception,请告诉我。
@Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; Object info = items.get(position); if (v == null) { LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.row, null); } if (info != null) { ImageView imView = (ImageView) v.findViewById(R.id.icon); TextView txtname =(TextView) v.findViewById(R.id.toptext); TextView txtAddr = (TextView) v.findViewById(R.id.bottomtext); //set image and set text as you like imview.setImageBitmap(IMAGE YOU WANT TO SET AAS ICON); txtname.setText(FILENAME YOU WANT TO SET); txtadr,setText(FILESIZE YOU WANT TO SET); // Better you take each info filename,filesize and icon in a arraylist and set them } return v; }