我有一个小程序可以处理图像和视频并将它们保存在/ sd / myapp / imagesAndVideos
问题是我想在我的应用程序中制作一个Tab,它显示我的app文件夹中包含所有图像和视频的所有图像和视频
我试图找到一些但没有希望花费6个小时搜索... 我只发现了一对,他们都只做了图像gridView,并没有从文件中加载..
当你一起看到图片和视频或普通的设备图库时,我想让它类似于Instgram gridView ..
答案 0 :(得分:1)
为什么不使用继承来实现同样的目标,让我向你解释相同的解释。
第一个Girdview或Listview都适用于适配器设计模式,说明这意味着所有AdapterView都挂在数据源上,生成相应的无限列表以供显示。
现在说,你想在List或Gird中显示X类型的内容,为此你可以做的是
通过上述方法可以生成您需要的一种网格,现在可以进一步改进这种设计。
你可以在从适配器返回getView之前设置它的视图类型,现在一旦你收到convertView,只需检查标签类型是否与当前项类型匹配,如果那么然后轻松使用相同的convertView else膨胀一个新的相应类型之一,并将其设置为标签,依此类推。
希望这会给你一个想法,
如果您还需要一些代码,也可以发表评论。
这是一个假装置。
// this is your main abstract class
public abstract class DataItem {
// You can define your data types here
public static final int DATA_TYPE_IMAGE = 0;
public static final int DATA_TYPE_VIDEO = 1;
// have all data item implement this
public abstract int getDataType();
public abstract String getContentUri();
public abstract View getChildView(Context context,View convertView);
}
// sample implementation for defining new image type data item
public class ImageItem extends DataItem {
public String contentUri;
public void setContenturi(String str){
this.contentUri = str;
}
@Override
public int getDataType() {
// return corresponding content type
return DataItem.DATA_TYPE_IMAGE;
}
@Override
public String getContentUri() {
// Return URI of image or video, to fetch information related to it
return this.contentUri;
}
@Override
public View getChildView(Context context,View convertView) {
// return the view you want to display for this data item in grid
// use content uri to fetch and populate Data and then generate view and return
// use convertView is not null
return null;
}
static class ImageData extends Data{
// have some variables here which will define attributes of this Data item
// in case of image
String imageName;
long takenData;
}
}
// your sample adapter
public class GridAdapter extends BaseAdapter {
ArrayList<DataItem> mList;
Context context;
public GridAdapter(ArrayList<DataItem> items, Context context){
this.mList = items;
this.context = context;
}
public void setList(ArrayList<DataItem> items){
this.mList = items;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mList.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return mList.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
DataItem item = mList.get(position);
if(convertView != null){
// first check if existing view can be used for diaply or nor
int tag = (Integer)convertView.getTag();
if(tag == item.getDataType()){
// alright both are of same type
return item.getChildView(context,convertView);
}else{
// get the new view for corresponding data, set it as tag and return
View view = item.getChildView(context,null);
view.setTag(new Integer(item.getDataType()));
return view;
}
}else{
View view = item.getChildView(context,null);
view.setTag(new Integer(item.getDataType()));
return view;
}
}
}
这就足够了我想抛出一个指针。