我需要开发android文件资源管理器应用程序。我将文件名和文件路径都放到两个单独的ArrayLists中,然后分配给ArrayAdapter。我使用TextView来显示文件名和文件夹名。文件浏览器运行良好。现在我需要将文件夹图标添加到文件夹并将文件图标添加到文件。
在布局文件中无法进行,因为所有文件夹和文件都在同一个ArrayAdapter中。我尝试在代码中执行此操作,但我必须将整个ArrayList作为参数提供给ArrayAdapter,因此我无法单独对文件和文件夹进行分类。
如果有人有任何建议可以解决我的问题,我会适当的吗?
答案 0 :(得分:0)
我正在解决同样的问题。
使用ImageView
扩展您的列表行,您将在其中设置图标。例
file_row.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:textAppearanceLarge"
android:layout_toRightOf="@id/icon"/>
</RelativeLayout>
使用ArrayAdapter
之类的内容填写File
或从中获取isDirectory()
和getFileName()
信息的内容。
(可选)使用比较器对适配器项进行排序,将它们与顶部的左侧dirs进行比较。方法Adapter.sort(Comparator)
在ArrayAdapter的getView(int, View, ViewGroup)
方法中执行类似的操作。
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
if(convertView == null)
{
convertView = LayoutInflater.from(getContext()).inflate(R.layout.file_row, null);
}
FileItem item = getItem(position);
TextView nameTextView = (TextView)convertView.findViewById(android.R.id.text1);
nameTextView.setText(item.getFileName());
ImageView imageView = (ImageView)convertView.findViewById(R.id.icon);
if (item.isDirectory())
{
imageView.setImageResource(R.drawable.directory);
}
else
{
imageView.setImageResource(R.drawable.file);
}
return convertView;
}
当然,你可以做一些更复杂的事情,比如为每种文件类型设置不同的图标,设置缩略图等。但原理类似。