I want to implement a file browser in my app. I saw code for a file browser. But in all those examples the dir /files are listed as a lisrview. I am want to give a gridview display in my app. The folders / files will be listed in a grid. On clickikng a folder , it will open the next level grid.

I didnt see any implementation supporting this. If you have any reference please share

thanks for the time and support

有帮助吗?

解决方案

Adding my code here for anyones future reference

public class FileBrowserActivity extends Activity {
GridView gridView;



public static List<FileBrowserItem> gridItemsList;
public static String name;
String root;
String TAG= "FileBrowser";
public static boolean multiSelectFlag = false;
@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.gridview);
     root = getIntent().getExtras().getString("rootpath");

    Log.i(TAG,"path:"+ root);

    getGridItemsList();
    gridView = (GridView) findViewById(R.id.gridView1);

    gridView.setAdapter(new FileBrowserGridViewAdapter(this));

}

private void getGridItemsList() {
    gridItemsList = new ArrayList<FileBrowserItem>();
     File file;
    file = new File(root);
    File list[] = file.listFiles();
    if(list.length == 0){
        Toast.makeText(getApplicationContext(), "Empty Folde", Toast.LENGTH_SHORT).show();
    }
    for (int i = 0; i < list.length; i++) {
        FileBrowserItem item = new FileBrowserItem();
        File temp_file = new File(file.getAbsolutePath(),list[i].getName());
        item.setPath( file.getAbsolutePath()+"/"+list[i].getName());
        item.setName(list[i].getName());
        //Log.i(TAG,i + item.value + item.name);
        if ( temp_file.listFiles() != null) {
            item.setType(FileBrowserItem.DIRECTORY_TYPE)  ;
        } else {
            item.setType(FileBrowserItem.FILE_TYPE)  ;
        } 
        gridItemsList.add(item);
    }

}
@Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
     if ((keyCode == KeyEvent.KEYCODE_BACK)) {
         root = new File(root).getParent();
         Log.i(TAG,"back"+root);
         getGridItemsList();
         finish();
         return true;
     } else {
         return super.onKeyDown(keyCode, event);
     }
 }

}

public View getView(final int position, View convertView, ViewGroup parent) {

    ViewHolder holder;
    if (convertView == null) {
        LayoutInflater mInflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = mInflater.inflate(R.layout.grid_item, null);
        holder = new ViewHolder();
        holder.text1 = (TextView) convertView
                .findViewById(R.id.grid_item_label);
        holder.image = (ImageView) convertView
                .findViewById(R.id.grid_item_image);
        holder.checkBox= (CheckBox) convertView
                .findViewById(R.id.checkBox);

        holder.image.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                Log.d("onClick", "position [" + position + "]");

                if (FileBrowserActivity.gridItemsList.get(position)
                        .getType() == FileBrowserItem.DIRECTORY_TYPE) {
                    Intent intent = new Intent(mContext,
                            FileBrowserActivity.class);
                    intent.putExtra("rootpath",
                            FileBrowserActivity.gridItemsList.get(position)
                                    .getPath());
                    mContext.startActivity(intent);
                }
            }
        });
        convertView.setTag(holder);
    } else {

        holder = (ViewHolder) convertView.getTag();

    }
    Log.i(TAG, "Position" + position);
    Log.i(TAG, FileBrowserActivity.gridItemsList.get(position).getName());
    holder.text1.setText(FileBrowserActivity.gridItemsList.get(position)
            .getName());
    holder.image
            .setImageResource(getImageIcon(FileBrowserActivity.gridItemsList
                    .get(position).getType()));
    if(FileBrowserActivity.multiSelectFlag){
        holder.checkBox.setVisibility(View.VISIBLE);
    }
    else{
        holder.checkBox.setVisibility(View.GONE);
    }
    return convertView;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top