Java Android实现不对称GridView

Java Android实现不对称GridView,java,android,xml,view,grid,Java,Android,Xml,View,Grid,您好,我对AsymetricGridView的实现有一些问题,它仍然会崩溃,但我不知道有什么问题,如何使用我的适配器正确地实现它存在指向AsymetricGridView库的错误链接。多谢各位 Adapter must be an instance of AsymmetricGridViewAdapter at com.felipecsl.asymmetri

您好,我对AsymetricGridView的实现有一些问题,它仍然会崩溃,但我不知道有什么问题,如何使用我的适配器正确地实现它存在指向AsymetricGridView库的错误链接。多谢各位

Adapter must be an instance of AsymmetricGridViewAdapter
                                                                      at com.felipecsl.asymmetricgridview.library.widget.AsymmetricGridView.setAdapter(AsymmetricGridView.java:71)
                                                                      at com.gabriel.movies.fragment.MainFragment.render(MainFragment.java:140)
                                                                      at com.gabriel.movies.fragment.MainFragment$MyTask.onPostExecute(MainFragment.java:228)
                                                                      at com.gabriel.movies.fragment.MainFragment$MyTask.onPostExecute(MainFragment.java:161)
我的代码

<com.felipecsl.asymmetricgridview.library.widget.AsymmetricGridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gridView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

AsymmetricGridView gridview;
List<ItemCategory> list;
AdapterCategory adapter;

    gridview = (AsymmetricGridView) mRootView.findViewById(R.id.gridView1);
    gridview.setRequestedColumnWidth(Utils.dpToPx(getActivity(), 120));

    list = new ArrayList<ItemCategory>();

    adapter = new AdapterCategory(getActivity(), R.layout.fragment_worcipe_main_item, list);
    gridview.setAdapter(adapter);

不对称网格视图;
名单;
适配器类别适配器;
gridview=(AsymmetricGridView)mRootView.findViewById(R.id.gridView1);
setRequestedColumnWidth(Utils.dpToPx(getActivity(),120));
列表=新的ArrayList();
adapter=newadapterCategory(getActivity(),R.layout.fragment\u worcipe\u main\u项,列表);
setAdapter(适配器);
和适配器代码

public class AdapterCategory extends ArrayAdapter<ItemCategory> {
    ItemCategory object;
    private Activity activity;
    private List<ItemCategory> item;
    private int row;



     public AdapterCategory(Activity act, int resource, List<ItemCategory> arrayList) {
            super(act, resource, arrayList);
            this.activity = act;
            this.row = resource;
            this.item = arrayList;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            View view = convertView;
            ViewHolder holder;

            if (view == null) {
                LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                view = inflater.inflate(row, null);
                holder = new ViewHolder();
                view.setTag(holder);
            } else {
                holder = (ViewHolder) view.getTag();
            }

            if ((item == null) || ((position + 1) > item.size()))
                return view;

            object = item.get(position);

            holder.title = (TextView) view.findViewById(R.id.category_title);
            holder.image = (ImageView) view.findViewById(R.id.category_image);

            holder.title.setText(object.getCategoryName());

            Picasso.with(getContext()).load(RecipeConfig.SERVER_URL + "/upload/" +
                    object.getCategoryImageurl()).placeholder(R.drawable.ic_thumbnail).into(holder.image);

            return view;
        }

        public class ViewHolder {
            public TextView title;
            public ImageView image;

        }
    }
公共类AdapterCategory扩展了ArrayAdapter{
项目类别对象;
私人活动;
私人清单项目;
私人int row;
公共适配器类别(活动法案、int资源、列表数组列表){
超级(act、资源、arrayList);
这个活动=行动;
this.row=资源;
this.item=arrayList;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
视图=转换视图;
视窗座;
如果(视图==null){
LayoutInflater充气器=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气器\u服务);
视图=充气机。充气(行,空);
holder=新的ViewHolder();
视图.设置标签(支架);
}否则{
holder=(ViewHolder)view.getTag();
}
if((item==null)| |((position+1)>item.size())
返回视图;
object=item.get(位置);
holder.title=(TextView)view.findViewById(R.id.category\u title);
holder.image=(ImageView)view.findViewById(R.id.category\u image);
holder.title.setText(object.getCategoryName());
Picasso.with(getContext()).load(RecipeConfig.SERVER_URL+“/upload/”+
object.getCategoryImageurl())。占位符(R.drawable.ic_缩略图)。插入(holder.image);
返回视图;
}
公共类视图持有者{
公共文本视图标题;
公众形象;
}
}

首先,您需要一个类来扩展表单AsymmetricItem。这应该是这样的:

public class DemoItem implements AsymmetricItem {
private int columnSpan;
private int rowSpan;
private int position;
private String text;
public DemoItem() {
    this(1, 1, 0,"");
}

public DemoItem(int columnSpan, int rowSpan, int position,String text) {
    this.columnSpan = columnSpan;
    this.rowSpan = rowSpan;
    this.position = position;
    this.text=text;
}

public DemoItem(Parcel in) {
    readFromParcel(in);
}

@Override public int getColumnSpan() {
    return columnSpan;
}

@Override public int getRowSpan() {
    return rowSpan;
}

public String getText(){
    return text;
}

public int getPosition() {
    return position;
}

@Override public String toString() {
    return String.format("%s: %sx%s", position, rowSpan, columnSpan);
}

@Override public int describeContents() {
    return 0;
}

private void readFromParcel(Parcel in) {
    columnSpan = in.readInt();
    rowSpan = in.readInt();
    position = in.readInt();
}

@Override public void writeToParcel(@NonNull Parcel dest, int flags) {
    dest.writeInt(columnSpan);
    dest.writeInt(rowSpan);
    dest.writeInt(position);
}

/* Parcelable interface implementation */
public static final Parcelable.Creator<DemoItem> CREATOR = new Parcelable.Creator<DemoItem>() {

    @Override public DemoItem createFromParcel(@NonNull Parcel in) {
        return new DemoItem(in);
    }

    @Override @NonNull
    public DemoItem[] newArray(int size) {
        return new DemoItem[size];
    }
};
}
 private ListAdapter adapter;
    private AsymmetricGridView listView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.dashboard_gridview, container, false);
        listView = (AsymmetricGridView) rootView.findViewById(R.id.listView);
        listView.setAllowReordering(true);
        final List<DemoItem> items = new ArrayList<>();

        items.add(new DemoItem(2,2,0,"Example Text 1"));
        items.add(new DemoItem(1,1,0,"Example Text 2"));
        items.add(new DemoItem(1,1,0,"Example Text 3"));
        items.add(new DemoItem(2,2,0,"Example Text 4"));
        items.add(new DemoItem(1,1,0,"Example Text 5"));
        items.add(new DemoItem(1,1,0,"Example Text 6"));
        items.add(new DemoItem(1,1,0,"Example Text 7"));
        items.add(new DemoItem(2,2,0,"Example Text 8"));
        items.add(new DemoItem(1,1,0,"Example Text 9"));
        items.add(new DemoItem(1,1,0,"Example Text 10"));

        adapter = new GridAdapter(getContext(), items);
        listView.setAdapter(new AsymmetricGridViewAdapter(getContext(), listView, adapter));

        return rootView;
    }
}
public类DemoItem实现AsymmetricItem{
私营企业;
私有int rowSpan;
私人职位;
私有字符串文本;
公共项目(){
这(1,1,0,“”);
}
公共DemoItem(int-columnSpan、int-rowSpan、int-position、String-text){
this.columnSpan=columnSpan;
this.rowSpan=rowSpan;
这个位置=位置;
this.text=文本;
}
公共物品(包裹中){
从包裹中读取;
}
@重写公共int getColumnSpan(){
返回列跨度;
}
@重写公共int getRowSpan(){
返回行跨度;
}
公共字符串getText(){
返回文本;
}
public int getPosition(){
返回位置;
}
@重写公共字符串toString(){
返回字符串。格式(“%s:%sx%s”,位置,行跨度,列跨度);
}
@重写公共int描述符内容(){
返回0;
}
private void readFromParcel(地块位于中){
columnSpan=in.readInt();
rowSpan=in.readInt();
位置=in.readInt();
}
@覆盖公共无效writeToParcel(@NonNull Parcel dest,int标志){
目的写入(第span列);
目的写入(行范围);
目的写入(位置);
}
/*可包裹接口的实现*/
public static final Parcelable.Creator=新建Parcelable.Creator(){
@覆盖公共DemoItem createFromParcel(@NonNull Parcel in){
返回新的DemoItem(在中);
}
@覆盖@NonNull
公共DemoItem[]新数组(整数大小){
返回新的DemoItem[大小];
}
};
}
然后,您需要创建适配器,它应该如下所示(您应该循环使用视图除外):

公共类GridAdapter扩展了ArrayAdapter{
私人最终裁员;
公共GridAdapter(上下文、列表项){
超级(上下文,0,项);
layoutInflater=layoutInflater.from(上下文);
}
公共GridAdapter(上下文){
超级(上下文,0);
layoutInflater=layoutInflater.from(上下文);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
DemoItem=getItem(位置);
视图v=布局更平坦。充气(R.layout.adapter_项,父项,false);
TextView TextView=(TextView)v.findViewById(R.id.TextView);
setText(item.getText());
返回v;
}
@重写公共int getViewTypeCount(){
返回2;
}
@重写公共int getItemViewType(int位置){
返回位置%2==0?1:0;
}
公共项目(列出新项目){
addAll(新项目);
notifyDataSetChanged();
}
公共无效设置项(列出更多项){
清除();
附加项目(更多项目);
}
}
最后,当您拥有所有这些时,您可以实现活动/片段中的所有内容,如下所示:

public class DemoItem implements AsymmetricItem {
private int columnSpan;
private int rowSpan;
private int position;
private String text;
public DemoItem() {
    this(1, 1, 0,"");
}

public DemoItem(int columnSpan, int rowSpan, int position,String text) {
    this.columnSpan = columnSpan;
    this.rowSpan = rowSpan;
    this.position = position;
    this.text=text;
}

public DemoItem(Parcel in) {
    readFromParcel(in);
}

@Override public int getColumnSpan() {
    return columnSpan;
}

@Override public int getRowSpan() {
    return rowSpan;
}

public String getText(){
    return text;
}

public int getPosition() {
    return position;
}

@Override public String toString() {
    return String.format("%s: %sx%s", position, rowSpan, columnSpan);
}

@Override public int describeContents() {
    return 0;
}

private void readFromParcel(Parcel in) {
    columnSpan = in.readInt();
    rowSpan = in.readInt();
    position = in.readInt();
}

@Override public void writeToParcel(@NonNull Parcel dest, int flags) {
    dest.writeInt(columnSpan);
    dest.writeInt(rowSpan);
    dest.writeInt(position);
}

/* Parcelable interface implementation */
public static final Parcelable.Creator<DemoItem> CREATOR = new Parcelable.Creator<DemoItem>() {

    @Override public DemoItem createFromParcel(@NonNull Parcel in) {
        return new DemoItem(in);
    }

    @Override @NonNull
    public DemoItem[] newArray(int size) {
        return new DemoItem[size];
    }
};
}
 private ListAdapter adapter;
    private AsymmetricGridView listView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.dashboard_gridview, container, false);
        listView = (AsymmetricGridView) rootView.findViewById(R.id.listView);
        listView.setAllowReordering(true);
        final List<DemoItem> items = new ArrayList<>();

        items.add(new DemoItem(2,2,0,"Example Text 1"));
        items.add(new DemoItem(1,1,0,"Example Text 2"));
        items.add(new DemoItem(1,1,0,"Example Text 3"));
        items.add(new DemoItem(2,2,0,"Example Text 4"));
        items.add(new DemoItem(1,1,0,"Example Text 5"));
        items.add(new DemoItem(1,1,0,"Example Text 6"));
        items.add(new DemoItem(1,1,0,"Example Text 7"));
        items.add(new DemoItem(2,2,0,"Example Text 8"));
        items.add(new DemoItem(1,1,0,"Example Text 9"));
        items.add(new DemoItem(1,1,0,"Example Text 10"));

        adapter = new GridAdapter(getContext(), items);
        listView.setAdapter(new AsymmetricGridViewAdapter(getContext(), listView, adapter));

        return rootView;
    }
}
私有列表适配器;
私有不对称GridView listView;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.dashboard\u网格视图,容器,false);
listView=(AsymmetricGridView)rootView.findViewById(R.id.listView);
setAllowerOrdering(true);
最终列表项=新的ArrayList();
添加(新的DemoItem(2,2,0,“示例文本1”);
添加(新的DemoItem(1,1,0,“示例文本2”);
添加(新的DemoItem(1,1,0,“示例文本3”);
添加(新的DemoItem(2,2,0,“示例文本4”);
添加(新的DemoItem(1,1,0,“示例文本5”);
添加(新的DemoItem(1,1,0,“示例文本6”);
添加(新的DemoItem(1,1,0,“示例文本7”);
项目。添加(新)