如何在文件夹和文件中添加图标?

时间:2013-12-16 23:18:16

标签: android android-layout android-listview

我需要开发android文件资源管理器应用程序。我将文件名和文件路径都放到两个单独的ArrayLists中,然后分配给ArrayAdapter。我使用TextView来显示文件名和文件夹名。文件浏览器运行良好。现在我需要将文件夹图标添加到文件夹并将文件图标添加到文件。

在布局文件中无法进行,因为所有文件夹和文件都在同一个ArrayAdapter中。我尝试在代码中执行此操作,但我必须将整个ArrayList作为参数提供给ArrayAdapter,因此我无法单独对文件和文件夹进行分类。

如果有人有任何建议可以解决我的问题,我会适当的吗?

1 个答案:

答案 0 :(得分:0)

我正在解决同样的问题。

  1. 使用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>
    
  2. 使用ArrayAdapter之类的内容填写File或从中获取isDirectory()getFileName()信息的内容。

  3. (可选)使用比较器对适配器项进行排序,将它们与顶部的左侧dirs进行比较。方法Adapter.sort(Comparator)

  4. 在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;
        }
    
  5. 当然,你可以做一些更复杂的事情,比如为每种文件类型设置不同的图标,设置缩略图等。但原理类似。