如何使用gridLayout onClick图像到不同的活动

时间:2017-05-13 05:24:55

标签: android fragment

这是我的形象:

This my image

如果我需要尝试任何事情,请建议我。

我的代码片段:

public class ShopFragment extends Fragment {

private  int imgShop[] = {R.drawable.thumbnail_01,
        R.drawable.thumbnail_02,
        R.drawable.thumbnail_03,
        R.drawable.thumbnail_04,
        R.drawable.thumbnail_05,
        R.drawable.thumbnail_06};
ViewPager pager;
SearchView searchView;

private int img[] = {R.drawable.scroll_view, R.drawable.scroll_view, R.drawable.scroll_view, R.drawable.scroll_view};


public ShopFragment() {
    // Required empty public constructor
}

private ArrayList<Shop> prepareShop() {

    ArrayList<Shop> shop = new ArrayList<>();
    for (int i = 0; i < imgShop.length; i++) {
        Shop shops = new Shop();
        shops.setShop_img(imgShop[i]);
        shop.add(shops);
    }
    return shop;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_shop, container, false);




    pager = (ViewPager) view.findViewById(R.id.img_pager);
    ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getContext(), img);
    pager.setAdapter(viewPagerAdapter);


    RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.mRecyclerShop);
    RecyclerView.LayoutManager layoutmanager = new GridLayoutManager(getContext(), 3);
    recyclerView.setLayoutManager(layoutmanager);


    ArrayList<Shop> shops = prepareShop();
    ShopRecycleAdaptor adaptor = new ShopRecycleAdaptor(getContext(), shops);
    recyclerView.setAdapter(adaptor);

    return view;
}

我的适配器

public class ShopRecycleAdaptor extends RecyclerView.Adapter<ShopRecycleAdaptor.ViewHolder> {
private ArrayList<Shop> shop;
private Context context;
private int[] imgShop;



public ShopRecycleAdaptor(Context context, ArrayList<Shop> shop) {
    this.shop = shop;
    this.context = context;
}

@Override
public ShopRecycleAdaptor.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.model_shop, viewGroup, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(ShopRecycleAdaptor.ViewHolder holder, int position) {
    Picasso.with(context)
            .load(shop.get(position)
            .getShop_img())
            .into(holder.imgShop);
    holder.imgShop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(v.getContext(), ShopType.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.putExtra("shop", shop);
            v.getContext().startActivity(intent);
        }
    });
}


@Override
public int getItemCount() {
    return shop.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {

    private ImageView imgShop;

    public ViewHolder(View view) {

        super(view);

        imgShop = (ImageView) view.findViewById(R.id.img_shop);
    }

}

这是我的错误

  

05-13 11:45:54.091 8712-8712 / com.example.androiddev.army31 E / AndroidRuntime:FATAL EXCEPTION:main                                                                                处理:com.example.androiddev.army31,PID:8712                                                                                java.lang.RuntimeException:Parcel:无法编组值com.example.androiddev.army31.Shop@778fcae                                                                                    在android.os.Parcel.writeValue(Parcel.java:1476)                                                                                    在android.os.Parcel.writeList(Parcel.java:811)                                                                                    在android.os.Parcel.writeValue(Parcel.java:1423)                                                                                    在android.os.Parcel.writeArrayMapInternal(Parcel.java:723)                                                                                    在android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1412)                                                                                    在android.os.Bundle.writeToParcel(Bundle.java:1133)                                                                                    在android.os.Parcel.writeBundle(Parcel.java:763)                                                                                    在android.content.Intent.writeToParcel(Intent.java:8788)                                                                                    在android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3071)                                                                                    在android.app.Instrumentation.execStartActivity(Instrumentation.java:1539)                                                                                    在android.app.Activity.startActivityForResult(Activity.java:4391)                                                                                    在android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:50)                                                                                    在android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:79)                                                                                    在android.app.Activity.startActivityForResult(Activity.java:4335)                                                                                    在android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859)                                                                                    在android.app.Activity.startActivity(Activity.java:4697)                                                                                    在android.app.Activity.startActivity(Activity.java:4665)                                                                                    在com.example.androiddev.army31.ShopRecycleAdaptor $ 1.onClick(ShopRecycleAdaptor.java:57)                                                                                    在android.view.View.performClick(View.java:5646)                                                                                    在android.view.View $ PerformClick.run(View.java:22458)                                                                                    在android.os.Handler.handleCallback(Handler.java:761)                                                                                    在android.os.Handler.dispatchMessage(Handler.java:98)                                                                                    在android.os.Looper.loop(Looper.java:156)                                                                                    在android.app.ActivityThread.main(ActivityThread.java:6524)                                                                                    at java.lang.reflect.Method.invoke(Native Method)                                                                                    在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:941)                                                                                    在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831)

1 个答案:

答案 0 :(得分:0)

onClick类Parcelable?要将任何自定义类放入Bundle,该类必须实现Parcelable接口。见这里。

https://developer.android.com/reference/android/os/Parcelable.html

您的堆栈跟踪错误表明正在添加的信息实际上不符合Parcelable,因此导致问题的intent.putExtra("shop", shop); 错误不是

{{1}}

如果我正确地读这个话就行了。