【问题标题】:Using itemClickListener to pass data from api call to another fragment使用 itemClickListener 将数据从 api 调用传递到另一个片段
【发布时间】:2016-10-30 04:32:01
【问题描述】:

我的RecyclerView 中有一个来自我的 API 调用的数据列表。我有一个itemClickListener 界面,可以打开一个带有项目图像和详细信息的新片段。

当我单击该项目时,我需要将数据传递给第二个片段,它是适配器。它将如何运作?

我是否需要通过捆绑发送这些数据,然后在我的第二个片段中进行另一个 API 调用?还是只是包含数据的捆绑包,无需额外的 API 调用即可使用?

这是我的模型:

public class Products {

    private String productId;
    private String productName;
    private String shortDescription;
    private String longDescription;
    private String price;
    @SerializedName("productImage")
    private String image;
    @SerializedName("reviewRating")
    private double rating;
    private int reviewCount;
    private boolean inStock;

    public String getProductId() {
        return productId;
    }

    public String getProductName() {
        return productName;
    }

    public String getShortDescription() {
        return shortDescription;
    }

    public String getLongDescription() {
        return longDescription;
    }

    public String getPrice() {
        return price;
    }

    public String getImage() {
        return image;
    }

    public double getRating() {
        return rating;
    }

    public int getReviewCount() {
        return reviewCount;
    }

    public boolean isInStock() {
        return inStock;
    }
}

这是我的 MainFragment:

 private void setBundle(int position) {
    args = new Bundle();
    String[] clickedItem = {apiProducts.get(position).getImage(),
            apiProducts.get(position).getLongDescription(),
            String.valueOf(apiProducts.get(position).isInStock())};
    args.putStringArray("Item", clickedItem);
}

private void productsClickListener() {

    if (apiObjectAdapter != null) {

        apiObjectAdapter.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(View itemView, int position) {

                setBundle(position);
                setDetailsFragment(args);
            }
        });
    }

}

我的适配器:

public class ApiObjectAdapter extends RecyclerView.Adapter<ApiObjectAdapter.MyViewHolder> {

public void setOnItemClickListener(OnItemClickListener listener) {
    this.listener = listener;
}

public class MyViewHolder extends RecyclerView.ViewHolder {
    @BindView(R.id.product_name)
    public TextView name;
    @BindView(R.id.product_rating)
    public TextView rating;
    @BindView(R.id.product_price)
    public TextView price;


    public MyViewHolder(final View view) {
        super(view);
        this.parentView = view;

        try {
            ButterKnife.bind(this, view);
        } catch (Exception e) {
            e.printStackTrace();
        }

        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (listener != null)
                    listener.onItemClick(view, getLayoutPosition());
            }
        });
    }
}

【问题讨论】:

    标签: android api android-fragments bundle pass-data


    【解决方案1】:

    使用捆绑 表单发送者将数据作为

    Fragment fragment = new Fragment();
    Bundle bundle = new Bundle();
    bundle.putInt(key, value);
    fragment.setArguments(bundle);
    

    并在下一个接收器中接收为

    Bundle bundle = this.getArguments();
    int myInt = bundle.getInt(key, defaultValue);
    

    更多关于https://developer.android.com/reference/android/os/Bundle.html的细节

    【讨论】:

    • 我没有在我的包中发送 int。我需要发送字符串 imageURL 和字符串描述。我应该改用 parseable 吗?
    • 您也可以使用 parcelable,但如果您发送 productId 然后在片段中获取该特定产品的详细信息会更好。
    • 你也可以像这样把Stirng信息放到bundle.putString(String key, String value);bundle.putString("imageURL", "myurls.com/imag.png");bundle.putString("description" , "测试产品" );
    • 但我应该在拿到捆绑包后进行 api 调用吗?
    猜你喜欢
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多