带有可展开列表视图的视频库,父级使用水平滚动视图,子级使用垂直滚动视图。

4
尝试使用可展开列表视图(ExpandableListView)实现带有水平滚动视图(Horizontal ScrollView)子项的视频库。遇到的问题是:在水平列表视图中,会创建第一个子项的 n 个水平副本,而不是显示组中所有 n 个子项。
以下是我的代码。此活动从 SD 卡中特定文件夹(photography)获取保存的视频。检查子文件夹(这里是 crane、helicam、montage、multi)中是否有视频,并将其放入可展开列表视图组中的不同类别中。
public class ExpandableListActivity extends Activity {
List<String> groupList;
List<String> childList;
Map<String, List<String>> Collection;
ExpandableListView expListView;
ExpandableListAdapters expListAdapter;
public static final String DOC_FOLDER_NAME = "/photography/"; //FOLDER 
public static final String DOC_FOLDER_NAME_ONE = "/Crane/";
public static final String DOC_FOLDER_NAME_TWO = "/Helicam/";
public static final String DOC_FOLDER_NAME_THREE = "/Montage/";
public static final String DOC_FOLDER_NAME_FOURE = "/Multi camera output/";
private static final String TAG="OM";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.new_layout);
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);


    final String sdCard = Environment.getExternalStorageDirectory().toString() +DOC_FOLDER_NAME;

    if(getDeviceFiles().size() > 0)
    {
        createCollection();
        expListView = (ExpandableListView) findViewById(R.id.laptop_list);
        final ExpandableListAdapters expListAdapter = new     ExpandableListAdapters(this, Collection, groupList);
        expListView.setAdapter(expListAdapter);
        // setGroupIndicatorToRight();

        expListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
            int previousItem = 0;

            @Override
            public void onGroupExpand(int groupPosition) {
                if (groupPosition != previousItem)
                    expListView.collapseGroup(previousItem);
                previousItem = groupPosition;
            }
        });
    }
    else
    {
        Toast.makeText(getApplicationContext(), "Videos Not found", Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
    }
    setTitle("Videos");
}

public ArrayList<String> getDeviceFiles()
{
    ArrayList<String> mDeviceFileListApp = new ArrayList<String>();

    File directory = new File(Environment.getExternalStorageDirectory()+DOC_FOLDER_NAME+DOC_FOLDER_NAME_ONE);
    File directory1 = new File(Environment.getExternalStorageDirectory()+DOC_FOLDER_NAME+DOC_FOLDER_NAME_TWO);
    File directory2= new File(Environment.getExternalStorageDirectory()+DOC_FOLDER_NAME+DOC_FOLDER_NAME_THREE);
    File directory3 = new File(Environment.getExternalStorageDirectory() + DOC_FOLDER_NAME+DOC_FOLDER_NAME_FOURE);

    if(directory.length()!=0) // check no of files
    {
        for (File file : directory.listFiles())
        {
            if (file.isFile())
                mDeviceFileListApp.add(file.getName());
        }
    }
    if(directory1.length()!=0) // check no of files
    {
        for (File file : directory1.listFiles())
        {
            if (file.isFile())
                mDeviceFileListApp.add(file.getName());
        }
    }
    if(directory2.length()!=0) // check no of files
    {
        for (File file : directory2.listFiles())
        {
            if (file.isFile())
                mDeviceFileListApp.add(file.getName());
        }
    }
    if(directory3.length()!=0) // check no of files
    {
        for (File file : directory3.listFiles())
        {
            if (file.isFile())
                mDeviceFileListApp.add(file.getName());
        }
    }
    return mDeviceFileListApp;
}

public void createCollection() {

    groupList = new ArrayList<String>();
    groupList.add("Crane");
    groupList.add("Helicam");
    groupList.add("Montage");
    groupList.add("Multi Output");

    Collection = new LinkedHashMap<String, List<String>>();

    for (String laptop : groupList) {
        ArrayList<String> child = new ArrayList<String>();
        if (laptop.equals("Crane")) {
            ArrayList<String> FileList = GetFiles(Environment.getExternalStorageDirectory()+"/"+DOC_FOLDER_NAME+"/"+DOC_FOLDER_NAME_ONE,"mp4");
            for(String fileName : FileList)
                child.add(fileName);
            loadChild(child);
        }
        else if (laptop.equals("Helicam")){
            ArrayList<String> FileList = GetFiles(Environment.getExternalStorageDirectory()+"/"+DOC_FOLDER_NAME+"/"+DOC_FOLDER_NAME_TWO,"mp4");
            for(String fileName : FileList)
                child.add(fileName);
            loadChild(child);
        }
        else if (laptop.equals("Montage")){
            ArrayList<String> FileList = GetFiles(Environment.getExternalStorageDirectory()+"/"+DOC_FOLDER_NAME+"/"+DOC_FOLDER_NAME_THREE,"mp4");
            for(String fileName : FileList)
                child.add(fileName);
            loadChild(child);
        }
        else if (laptop.equals("Multi Output")){
            ArrayList<String> FileList = GetFiles(Environment.getExternalStorageDirectory()+"/"+DOC_FOLDER_NAME+"/"+DOC_FOLDER_NAME_FOURE,"mp4");
            for(String fileName : FileList)
                child.add(fileName);
            loadChild(child);
        }
        Collection.put(laptop, childList);
    }
}
private void loadChild(ArrayList<String> laptopModels) {
    childList = new ArrayList<String>();
    for (String model : laptopModels)
        childList.add(model);
}

private void setGroupIndicatorToRight() {
    /* Get the screen width */
    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    int width = dm.widthPixels;

    expListView.setIndicatorBounds(width - getDipsFromPixel(35), width - getDipsFromPixel(5));
}

// Convert pixel to dip
public int getDipsFromPixel(float pixels) {
    // Get the screen's density scale
    final float scale = getResources().getDisplayMetrics().density;
    // Convert the dps to pixels, based on density scale
    return (int) (pixels * scale + 0.5f);
}

// get files by type
private ArrayList<String> GetFiles(String path,String fileType) {
    ArrayList<String> tempFileList=new ArrayList<String>();
    File file=new File(path);
    File[] allfiles=file.listFiles();

    if(allfiles.length==0) {
        return null;
    }
    else
    {
        for(int i=0;i<allfiles.length;i++)
        {
            if(fileType.equals("mp4") && allfiles[i].getName().endsWith(".mp4"))
                tempFileList.add(allfiles[i].getName());
        }
    }
    return tempFileList;
}

可扩展列表视图的父适配器
public class ExpandableListAdapters extends BaseExpandableListAdapter {

private Activity context;
private Map<String, List<String>> laptopCollections;
private List<String> laptops;


public ExpandableListAdapters(Activity context, Map<String, List<String>> laptopCollections, List<String> laptops) {
    this.context = context;
    this.laptopCollections = laptopCollections;
    this.laptops = laptops;
}

public Object getChild(int groupPosition, int childPosition) {
    return laptopCollections.get(laptops.get(groupPosition)).get(childPosition);
}

public long getChildId(int groupPosition, int childPosition) {
    return childPosition;
}

public View getChildView(final int groupPosition, final int childPosition,
                         boolean isLastChild, View convertView, ViewGroup parent) {
    final String fileName = (String) getChild(groupPosition, childPosition);

    ChildHolder childHolder = null;
    if (convertView == null)
    {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.group_child_item, null, false);
        childHolder = new ChildHolder();
        convertView.setTag(childHolder);
    }
    else
    {
        childHolder = (ChildHolder) convertView.getTag();
    }
    childHolder.horizontalListView = (HListView) convertView.findViewById(R.id.horizontalListView);

    HorizontalListAdapter horizontalListAdapter = new HorizontalListAdapter(context, laptopCollections, laptops , groupPosition ,childPosition);
    childHolder.horizontalListView.setAdapter(horizontalListAdapter);

    return convertView;
}

public int getChildrenCount(int groupPosition) {
    return 1;
}

public Object getGroup(int groupPosition) {
    return laptops.get(groupPosition);
}

public int getGroupCount() {
    return laptops.size();
}

public long getGroupId(int groupPosition) {
    return groupPosition;
}

public View getGroupView(int groupPosition, boolean isExpanded,
                         View convertView, ViewGroup parent) {

    String laptopName = (String) getGroup(groupPosition);
    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.item_parent,null);

    }
    TextView item = (TextView) convertView.findViewById(R.id.laptop);
    item.setTypeface(null, Typeface.BOLD);
    item.setText(laptopName);

    ImageView indicator = (ImageView) convertView.findViewById(R.id.image_indicator);

    if(isExpanded) {
        indicator.setImageResource(R.drawable.axtivetabicon1);
        item.setTextColor(context.getResources().getColor(R.color.CodeGreen));
    } else {
        indicator.setImageResource(R.drawable.tabicon1);
        item.setTextColor(context.getResources().getColor(R.color.CodeBlack));
    }
    return convertView;
}

public boolean hasStableIds() {
    return true;
}

public boolean isChildSelectable(int groupPosition, int childPosition) {
    return true;
}

private static class ChildHolder
{
    HListView horizontalListView;
}

水平滚动子视图的适配器

public class HorizontalListAdapter extends BaseAdapter{
public static final String DOC_FOLDER_NAME = "/photography/"; // Folder
public static final String DOC_FOLDER_NAME_ONE = "/Crane/";
public static final String DOC_FOLDER_NAME_TWO = "/Helicam/";
public static final String DOC_FOLDER_NAME_THREE = "/Montage/";
public static final String DOC_FOLDER_NAME_FOURE = "/Multi camera output/";
private Context mContext;
private Map<String, List<String>> laptopCollections;
private List<String> laptops;
private int groupPosition;
private int childPosition;

package com.evolved.ayshir.picdrift;

import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;

import java.io.File;
import java.util.List;
import java.util.Map;

public class HorizontalListAdapter extends BaseAdapter
{
public static final String DOC_FOLDER_NAME = "/photography/"; //FOLDER
public static final String DOC_FOLDER_NAME_ONE = "/Crane/";
public static final String DOC_FOLDER_NAME_TWO = "/Helicam/";
public static final String DOC_FOLDER_NAME_THREE = "/Montage/";
public static final String DOC_FOLDER_NAME_FOURE = "/Multi camera output/";
private Context mContext;
private Map<String, List<String>> laptopCollections;
private List<String> laptops;
private int groupPosition;
private int childPosition;

public HorizontalListAdapter(Context context, Map<String, List<String>> laptopCollections, List<String> laptops, int groupPosition, int childPosition)
{
    this.mContext = context;
    this.laptopCollections = laptopCollections;
    this.laptops = laptops;
    this.groupPosition = groupPosition;
    this.childPosition = childPosition;
}

@Override
public Object getItem(int childPosition)
{
    return laptopCollections.get(laptops.get(groupPosition)).get(childPosition);
}

@Override
public int getCount()
{
    return laptopCollections.get(laptops.get(groupPosition)).size();
}

public Object getChild(int groupPosition, int childPosition) {
    return laptopCollections.get(laptops.get(groupPosition)).get(childPosition);
}

@Override
public long getItemId(int childPosition)
{
    return childPosition++;
}

@Override
public View getView( int position, View convertView, ViewGroup parent)
{
    ViewHolder viewHolder;

    if (convertView == null)
    {
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.child_item, null, false);
        viewHolder = new ViewHolder(convertView);
        convertView.setTag(viewHolder);

    }
    else
    {
        viewHolder = (ViewHolder) convertView.getTag();
    }

    // Implement Your code here what functionality you need.
    TextView item = (TextView) convertView.findViewById(R.id.laptop);

    {
        final String fileName = (String) getChild(groupPosition, childPosition);
        item.setText(fileName);

        ImageView imageThumbnail = (ImageView) convertView.findViewById(R.id.childImage);

        if (groupPosition == 0) {
            String filePath = Environment.getExternalStorageDirectory() + "/" + DOC_FOLDER_NAME + "/" + DOC_FOLDER_NAME_ONE + "/" + fileName;
            Glide.with(convertView.getContext())
                    .load(Uri.fromFile(new File(filePath))) // or URI/path
                    .into(imageThumbnail);
        } else if (groupPosition == 1) {
            String filePath = Environment.getExternalStorageDirectory() + "/" + DOC_FOLDER_NAME + "/" + DOC_FOLDER_NAME_TWO + "/" + fileName;
            Glide.with(convertView.getContext())
                    .load(Uri.fromFile(new File(filePath))) // or URI/path
                    .into(imageThumbnail);
        } else if (groupPosition == 2) {
            String filePath = Environment.getExternalStorageDirectory() + "/" + DOC_FOLDER_NAME + "/" + DOC_FOLDER_NAME_THREE + "/" + fileName;
            Glide.with(convertView.getContext())
                    .load(Uri.fromFile(new File(filePath))) // or URI/path
                    .into(imageThumbnail);

        } else if (groupPosition == 3) {
            String filePath = Environment.getExternalStorageDirectory() + "/" + DOC_FOLDER_NAME + "/" + DOC_FOLDER_NAME_FOURE + "/" + fileName;
            Glide.with(convertView.getContext())
                    .load(Uri.fromFile(new File(filePath))) // or URI/path
                    .into(imageThumbnail);
        }
    }
        convertView.setOnClickListener(new OnClickListener() {
            public void onClick(View convertView) {

                final String FileName = (String) getChild(groupPosition, childPosition);


                String filenameArray[] = FileName.split("\\.");
                String fileExtension = filenameArray[filenameArray.length - 1];
                String fileType = "";

                if (fileExtension.equals("mp4"))
                    fileType = "video/mpeg";

                if (fileType != "")

                {
                    if (groupPosition == 0) {
                        String sd = Environment.getExternalStorageDirectory() + DOC_FOLDER_NAME + DOC_FOLDER_NAME_ONE + FileName;
                        File productFileName = new File(Environment.getExternalStorageDirectory() + DOC_FOLDER_NAME + DOC_FOLDER_NAME_ONE + FileName);
                        Log.i("file is ", FileName);
                        Intent intent = new Intent(Intent.ACTION_VIEW);
                        intent.setDataAndType(Uri.fromFile(productFileName), fileType);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                        mContext.startActivity(intent);
                    } else if (groupPosition == 1) {
                        File productFileName0 = new File(Environment.getExternalStorageDirectory() + "/" + DOC_FOLDER_NAME + "/" + DOC_FOLDER_NAME_TWO + "/" + FileName);

                        Intent intent = new Intent(Intent.ACTION_VIEW);
                        intent.setDataAndType(Uri.fromFile(productFileName0), fileType);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                        mContext.startActivity(intent);
                    } else if (groupPosition == 2) {
                        File productFileName2 = new File(Environment.getExternalStorageDirectory() + "/" + DOC_FOLDER_NAME + "/" + DOC_FOLDER_NAME_THREE + "/" + FileName);

                        Intent intent = new Intent(Intent.ACTION_VIEW);
                        intent.setDataAndType(Uri.fromFile(productFileName2), fileType);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                        mContext.startActivity(intent);
                    } else if (groupPosition == 3) {
                        File productFileName3 = new File(Environment.getExternalStorageDirectory() + "/" + DOC_FOLDER_NAME + "/" + DOC_FOLDER_NAME_FOURE + "/" + FileName);

                        Intent intent = new Intent(Intent.ACTION_VIEW);
                        intent.setDataAndType(Uri.fromFile(productFileName3), fileType);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                        mContext.startActivity(intent);
                    }

                }
            }
        });
    return convertView;
}

private static class ViewHolder
{
    ImageView thumbnail;
    TextView modelName;

    public ViewHolder(View itemView) {
        thumbnail = (ImageView) itemView.findViewById(R.id.childImage);
        modelName = (TextView) itemView.findViewById(R.id.laptop);
    }
}

item_parent.xml的xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#99ffffff"
android:gravity="center_vertical"
android:padding="5dp">

<TextView
    android:id="@+id/laptop"
    android:textSize="18dp"
    android:text="Text"
    android:layout_weight="1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textStyle="bold"
    />

<ImageView
    android:id="@+id/image_indicator"
    android:src="@drawable/tabicon1"
    android:layout_width="15dp"
    android:layout_height="15dp"
    android:scaleType="fitCenter"
    android:layout_margin="5dp" />

</LinearLayout>

child_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:orientation="vertical"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#66ffffff"
android:gravity="center"
>


<FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center">

    <ImageView
        android:id="@+id/childImage"
        android:layout_width="180dp"
        android:layout_height="120dp"
        android:layout_gravity="center"
        android:padding="1dp"
        android:scaleType="fitCenter"
        android:cropToPadding="true"
        android:background="@drawable/border_image" />

    <ImageView
        android:id="@+id/play"
        android:src="@drawable/playiconnew"
        android:layout_width="35dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:scaleType="fitCenter" />

</FrameLayout>
<TextView
    android:id="@+id/laptop"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/childImage"
    android:layout_centerVertical="true"
    android:paddingLeft="15dp"
    android:text="Demo Text"
    android:layout_gravity="center"
    android:gravity="center" />


</LinearLayout>

group_item_child.xml

<it.sephiroth.android.library.widget.HListView
android:id="@+id/horizontalListView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/child"
android:padding="20dp"
xmlns:android="http://schemas.android.com/apk/res/android">

new_layout.xml`

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight=".1"
    >

    <ExpandableListView
        android:id="@+id/laptop_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:divider="@drawable/divider"
        android:groupIndicator="@null"
        />


</LinearLayout>

已解决问题2,即子项的点击 - 编辑并更新了HorizontalListAdapter。现在只剩下问题1,即复制子项。在HorizontalListAdapter的getView中引入childPosition ++时,目前遇到了OutOfBoundException。 - Shifu
我认为在HorizontalListAdapter中,我需要不断增加子项位置,直到它达到组的最后一个元素。但是不知何故,它显示了OutOfBoundException异常。 有人能告诉我如何避免这种情况吗? - Shifu
1个回答

0

为HorizontalListAdapter添加新的getView方法。该方法可以同时处理越界异常并正确显示组中所有子项。我发现它能够正常工作。

@Override
public View getView( int position, View convertView, ViewGroup parent)
{
    ViewHolder viewHolder;

    if (convertView == null)
    {
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.child_item, null, false);
        viewHolder = new ViewHolder(convertView);
        convertView.setTag(viewHolder);

    }
    else
    {
        viewHolder = (ViewHolder) convertView.getTag();
    }

    // Implement Your code here what functionality you need.
    TextView item = (TextView) convertView.findViewById(R.id.laptop);

    if(childPosition<getCount()){

        Log.i(TAG, "Child position " + childPosition);
        Log.i(TAG, "Size " + getCount());

        final String FileName = (String) getChild(groupPosition, childPosition);
        item.setText(FileName);

        ImageView imageThumbnail = (ImageView)convertView.findViewById(R.id.childImage);

        if(groupPosition == 0 ){
            String filePath = Environment.getExternalStorageDirectory() + "/" + DOC_FOLDER_NAME +"/"+ DOC_FOLDER_NAME_ONE + "/" + FileName;
            Glide.with(convertView.getContext())
                    .load(Uri.fromFile(new File(filePath))) // or URI/path
                    .into(imageThumbnail);
        }else if(groupPosition == 1 ){
            String filePath = Environment.getExternalStorageDirectory() + "/" + DOC_FOLDER_NAME + "/" + DOC_FOLDER_NAME_TWO + "/" + FileName;
            Glide.with(convertView.getContext())
                    .load(Uri.fromFile(new File(filePath))) // or URI/path
                    .into(imageThumbnail);
        }else if(groupPosition == 2 ){
            String filePath = Environment.getExternalStorageDirectory() + "/" + DOC_FOLDER_NAME + "/" + DOC_FOLDER_NAME_THREE + "/" + FileName;
            Glide.with(convertView.getContext())
                    .load(Uri.fromFile(new File(filePath))) // or URI/path
                    .into(imageThumbnail);

        }else if(groupPosition == 3 ){
            String filePath = Environment.getExternalStorageDirectory() + "/" + DOC_FOLDER_NAME + "/" + DOC_FOLDER_NAME_FOURE + "/" + FileName;
            Glide.with(convertView.getContext())
                    .load(Uri.fromFile(new File(filePath))) // or URI/path
                    .into(imageThumbnail);
        }
        convertView.setOnClickListener(new View.OnClickListener() {
            public void onClick(View convertView) {

                String filenameArray[] = FileName.split("\\.");
                String fileExtension = filenameArray[filenameArray.length - 1];
                String fileType = "";

                if (fileExtension.equals("mp4"))
                    fileType = "video/mpeg";

                if (fileType != "")

                {
                    if (groupPosition == 0) {
                        String sd = Environment.getExternalStorageDirectory() + DOC_FOLDER_NAME + DOC_FOLDER_NAME_ONE + FileName;
                        File productFileName = new File(Environment.getExternalStorageDirectory() + DOC_FOLDER_NAME + DOC_FOLDER_NAME_ONE + FileName);
                        Log.i("file is ", FileName);
                        Intent intent = new Intent(Intent.ACTION_VIEW);
                        intent.setDataAndType(Uri.fromFile(productFileName), fileType);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                        mContext.startActivity(intent);
                    } else if (groupPosition == 1) {
                        File productFileName0 = new File(Environment.getExternalStorageDirectory() + "/" + DOC_FOLDER_NAME + "/" + DOC_FOLDER_NAME_TWO + "/" + FileName);

                        Intent intent = new Intent(Intent.ACTION_VIEW);
                        intent.setDataAndType(Uri.fromFile(productFileName0), fileType);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                        mContext.startActivity(intent);
                    } else if (groupPosition == 2) {
                        File productFileName2 = new File(Environment.getExternalStorageDirectory() + "/" + DOC_FOLDER_NAME + "/" + DOC_FOLDER_NAME_THREE + "/" + FileName);

                        Intent intent = new Intent(Intent.ACTION_VIEW);
                        intent.setDataAndType(Uri.fromFile(productFileName2), fileType);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                        mContext.startActivity(intent);
                    } else if (groupPosition == 3) {
                        File productFileName3 = new File(Environment.getExternalStorageDirectory() + "/" + DOC_FOLDER_NAME + "/" + DOC_FOLDER_NAME_FOURE + "/" + FileName);

                        Intent intent = new Intent(Intent.ACTION_VIEW);
                        intent.setDataAndType(Uri.fromFile(productFileName3), fileType);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                        mContext.startActivity(intent);
                    }

                }
            }
        });
    }
    else if(childPosition==getCount())
    try{
        final String FileName = (String) getChild(groupPosition, 0);
        item.setText(FileName);

        ImageView imageThumbnail = (ImageView)convertView.findViewById(R.id.childImage);

        if(groupPosition == 0 ){
            String filePath = Environment.getExternalStorageDirectory() + "/" + DOC_FOLDER_NAME +"/"+ DOC_FOLDER_NAME_ONE + "/" + FileName;
            Glide.with(convertView.getContext())
                    .load(Uri.fromFile(new File(filePath))) // or URI/path
                    .into(imageThumbnail);
        }else if(groupPosition == 1 ){
            String filePath = Environment.getExternalStorageDirectory() + "/" + DOC_FOLDER_NAME + "/" + DOC_FOLDER_NAME_TWO + "/" + FileName;
            Glide.with(convertView.getContext())
                    .load(Uri.fromFile(new File(filePath))) // or URI/path
                    .into(imageThumbnail);
        }else if(groupPosition == 2 ){
            String filePath = Environment.getExternalStorageDirectory() + "/" + DOC_FOLDER_NAME + "/" + DOC_FOLDER_NAME_THREE + "/" + FileName;
            Glide.with(convertView.getContext())
                    .load(Uri.fromFile(new File(filePath))) // or URI/path
                    .into(imageThumbnail);

        }else if(groupPosition == 3 ){
            String filePath = Environment.getExternalStorageDirectory() + "/" + DOC_FOLDER_NAME + "/" + DOC_FOLDER_NAME_FOURE + "/" + FileName;
            Glide.with(convertView.getContext())
                    .load(Uri.fromFile(new File(filePath))) // or URI/path
                    .into(imageThumbnail);
        }

        convertView.setOnClickListener(new View.OnClickListener() {
            public void onClick(View convertView) {


                String filenameArray[] = FileName.split("\\.");
                String fileExtension = filenameArray[filenameArray.length - 1];
                String fileType = "";

                if (fileExtension.equals("mp4"))
                    fileType = "video/mpeg";

                if (fileType != "")

                {
                    if (groupPosition == 0) {
                        String sd = Environment.getExternalStorageDirectory() + DOC_FOLDER_NAME + DOC_FOLDER_NAME_ONE + FileName;
                        File productFileName = new File(Environment.getExternalStorageDirectory() + DOC_FOLDER_NAME + DOC_FOLDER_NAME_ONE + FileName);
                        Log.i("file is ", FileName);
                        Intent intent = new Intent(Intent.ACTION_VIEW);
                        intent.setDataAndType(Uri.fromFile(productFileName), fileType);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                        mContext.startActivity(intent);
                    } else if (groupPosition == 1) {
                        File productFileName0 = new File(Environment.getExternalStorageDirectory() + "/" + DOC_FOLDER_NAME + "/" + DOC_FOLDER_NAME_TWO + "/" + FileName);

                        Intent intent = new Intent(Intent.ACTION_VIEW);
                        intent.setDataAndType(Uri.fromFile(productFileName0), fileType);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                        mContext.startActivity(intent);
                    } else if (groupPosition == 2) {
                        File productFileName2 = new File(Environment.getExternalStorageDirectory() + "/" + DOC_FOLDER_NAME + "/" + DOC_FOLDER_NAME_THREE + "/" + FileName);

                        Intent intent = new Intent(Intent.ACTION_VIEW);
                        intent.setDataAndType(Uri.fromFile(productFileName2), fileType);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                        mContext.startActivity(intent);
                    } else if (groupPosition == 3) {
                        File productFileName3 = new File(Environment.getExternalStorageDirectory() + "/" + DOC_FOLDER_NAME + "/" + DOC_FOLDER_NAME_FOURE + "/" + FileName);

                        Intent intent = new Intent(Intent.ACTION_VIEW);
                        intent.setDataAndType(Uri.fromFile(productFileName3), fileType);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                        mContext.startActivity(intent);
                    }

                }
            }
        });

    }
    catch( IndexOutOfBoundsException e){ Log.d(TAG, "caught");}
    childPosition++;

    return convertView;
}

private static class ViewHolder
{
    ImageView thumbnail;
    TextView modelName;

    public ViewHolder(View itemView) {
        thumbnail = (ImageView) itemView.findViewById(R.id.childImage);
        modelName = (TextView) itemView.findViewById(R.id.laptop);
    }
}

}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接