基于Android TV端的文件选择器(UI比较丑,主要看逻辑)
发布日期:2021-05-08 18:11:35 浏览次数:16 分类:原创文章

本文共 6345 字,大约阅读时间需要 21 分钟。

选择器activity :

public class FileChooserActivity extends Activity {    private ListView mFileListView = null;    private File[] mFileList = null;    private FileAdapter mFileAdapter = null;    private String mCurPath = null;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_file_chooser);        setViews();        initData();    }    private void initData() {       switch (FileUtil.getPid()) {           case XXXX:               File file = new File(XXX);               if(file.exists()) {                    mFileList =  file.listFiles();                    mCurPath = XXX;               }               else {                   Toast.makeText(FileChooserActivity.this,getString(R.string.device_not_found),Toast.LENGTH_SHORT).show();               }               break;               }       if(mFileList != null) {           mFileAdapter = new FileAdapter(FileChooserActivity.this,mFileList);           mFileListView.setAdapter(mFileAdapter);       }    }    private void setViews() {        mFileListView = (ListView) findViewById(R.id.file_list);        mFileListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {                mCurPath = mFileList[position].getPath();                if(mFileList[position].isDirectory()) {                    mFileList = mFileList[position].listFiles();                    mFileAdapter.notifyData(mFileList);                }                else if(FileUtil.getFileExtension(mFileList[position].getName()).equalsIgnoreCase("m3u") || FileUtil.getFileExtension(mFileList[position].getName()).equalsIgnoreCase("m3u8") ){                    /**                     * 是M3U文件,传给MAinActivity                     */                    finishWithResult(mFileList[position]);                }                else {                    Toast.makeText(FileChooserActivity.this,getString(R.string.not_m3u),Toast.LENGTH_SHORT).show();                }            }        });    }    private void finishWithResult(File file) {        Uri startDir = Uri.fromFile(file);        Intent intent = new Intent();   // 以intent的方式将结果返回调用类        intent.setDataAndType(startDir,                "vnd.android.cursor.dir/lysesoft.andexplorer.file");        setResult(RESULT_OK, intent);        finish();    }    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if(event.getAction() == KeyEvent.ACTION_DOWN) {            switch (keyCode) {                case KeyEvent.KEYCODE_BACK:                    ViseLog.d("mCurPath : "+mCurPath);                    if(mCurPath.equals(XXX))                    {                        finish();                    }                    else                    {                        File file = new File(mCurPath);                        if(file.isDirectory())                        {                            mCurPath = file.getParentFile().getPath();                            mFileList = file.getParentFile().listFiles();                            mFileAdapter.notifyData(mFileList);                        }                    }                    return true;            }        }        return super.onKeyDown(keyCode, event);    }}
activity_file_chooser

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.excellence.m3uplayer.activity.FileChooserActivity">    <ListView        android:id="@+id/file_list"        android:layout_width="match_parent"        android:layout_height="match_parent">    </ListView></RelativeLayout>

FileAdapter:

public class FileAdapter extends BaseAdapter {    private LayoutInflater mInflater;    private Context mContext;    private File[] mFileList;    public FileAdapter(Context context, File[] data )    {        this.mContext = context;        mInflater = LayoutInflater.from(mContext);        this.mFileList = data;    }    public void notifyData(File[] data)    {        mFileList = data;        notifyDataSetChanged();    }    public int getCount()    {        // TODO Auto-generated method stub        return mFileList.length;    }    public Object getItem(int position)    {        // TODO Auto-generated method stub        return position;    }    public long getItemId(int position)    {        // TODO Auto-generated method stub        return position;    }    @SuppressWarnings("deprecation")    public View getView(int position, View convertView, ViewGroup parent)    {        // TODO Auto-generated method stub        final ViewHolder viewHolder;        if (convertView == null)        {            viewHolder = new ViewHolder();            if (viewHolder != null)            {                convertView = mInflater.inflate(R.layout.list_item, null);                viewHolder.mFileName = (TextView) convertView.findViewById(R.id.text_file);                viewHolder.mFileImg = (ImageView) convertView.findViewById(R.id.img_file);                convertView.setTag(viewHolder);            }        }        else        {            viewHolder = (ViewHolder) convertView.getTag();        }        viewHolder.mFileName.setText(mFileList[position].getName());        return convertView;    }    private static class ViewHolder    {        private TextView mFileName;        private ImageView mFileImg;    }

list_item.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:gravity="center_horizontal"    android:orientation="horizontal" >    <ImageView        android:id="@+id/img_file"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginLeft="10dp"        />    <TextView        android:id="@+id/text_file"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:textSize="22sp"        android:layout_marginLeft="20dp"        /></LinearLayout>

上一篇:Android低级错误踩坑之Application
下一篇:使用FFMpeg将MP4转为m3u8

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月09日 01时51分17秒