基于Android TV端的文件选择器(UI比较丑,主要看逻辑)
2018-03-23 19:40
232 查看
选择器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);
}
}
<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>
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进阶开发(5)地图的基本操作、事件监听、用户UI、图层选择等
- 基于Android 下载文件时,更新UI简单帮助类
- 基于Android 下载文件时,更新UI简单帮助类
- 基于Android 下载文件时,更新UI简单帮助类
- U3D里UI相关逻辑和文件的组织关系的各种形式的比较
- U3D里UI相关逻辑和文件的组织关系的各种形式的比较
- iphone/android比较学习之──图片、文件、字符串
- Android文件选择器
- 我搭建基于XTI_D902-B-V平台以NFS文件系统的方式启动Android的过程
- Android下基于XML的Graphics shape的高级UI设计,定义圆角背景等
- 基于android手机的3G+GPS远程控制模型车工程-电路改装1-单片机选择
- shell编程:引用变量、内部变量、条件测试、字符串比较、整数比较、文件比较、逻辑操作、引号、通配符、调试执行
- Android读写文件基于Java的文件输入输出流
- android 根据文件的扩展名选择用什么应用程序打开
- android文件选择、读取、浏览器的实现(音乐文件)
- Android中遍历文件夹、比较文件类型测试
- Android中XML文件常用解析方式的比较分析
- Code UI Test如何配置code coverage(启用及选择所包括的文件)
- Android.os下的StatFs类主要用来获取文件系统的状态,能够获取sd卡的大小和剩余空间,获取系统内部空间也就是/system的大小和剩余空间等等。
- BREW与Android中的UI事件框架比较