繁体   English   中英

如何将变量从适配器传递到片段?

[英]How to pass a variable from adapter to fragment?

我有一个回收站。 一旦用户点击 recyclerview 项目的任何项目,它应该打开一个新片段。 但我想传递一个 id,就像我们使用 putExtra 有意发送一样。

下面是我的适配器 onBindViewHolder 方法代码 -

public void onBindViewHolder(@NonNull DashboardViewHolder holder, int position) {
        final Dashboard product = dashboardList.get(position);

        //loading the image
        Glide.with(mCtx)
                .load(product.getImage())
                .into(holder.imageView);

        holder.rate.setText(product.getRate());
        holder.name.setText(product.getName());
        holder.city.setText(product.getCity());
        //holder.id.setText(String.valueOf(product.getId()));
        holder.boatList.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(mCtx, ""+String.valueOf(product.getId()), Toast.LENGTH_SHORT).show();
                //Intent intent = new Intent(mCtx, AddNewBoatFragment.class);
                //intent.putExtra("boat_id", product.getId());
                //intent.putExtra("owner_id", product.getOwner_id());
                //mCtx.startActivity(intent);
                //getSupportFragmentManager().beginTransaction().replace(R.id.dahsboard_fragment,
                        //new MyBoatFragment()).commit();
                Fragment fragment = new AddNewBoatFragment();
                FragmentManager fm = ((AppCompatActivity)mCtx).getSupportFragmentManager();
                FragmentTransaction ft = fm.beginTransaction();
                ft.replace(R.id.dahsboard_fragment, fragment);
                ft.commit();
            }
        });
    }

下面是我的课——

public Dashboard(int id, int owner_id, String image, String rate, String name, String city){
        this.id = id;
        this.owner_id = owner_id;
        this.image = image;
        this.rate = rate;
        this.name = name;
        this.city = city;
    }

    public int getId(){ return id; }

    public String getImage() {
        return image;
    }

    public String getRate() { return rate; }

    public String getName(){
        return name;
    }

    public String getCity() { return city; }

    public int getOwner_id() { return owner_id; }

您应该在AddNewBoatFragment声明一个静态方法,以根据给定的参数创建一个 Fragment 实例。

public class AddNewBoatFragment extends Fragment {

    private static final String ARGUMENT_BOAT_ID = "ARGUMENT_BOAT_ID";
    private static final String ARGUMENT_OWNER_ID = "ARGUMENT_OWNER_ID";

    public static AddNewBoatFragment newInstance(int boatId, String ownerId) {
        Bundle args = new Bundle();
        // Save data here
        args.putInt(ARGUMENT_BOAT_ID, boatId);
        args.putString(ARGUMENT_OWNER_ID, ownerId);
        AddNewBoatFragment fragment = new AddNewBoatFragment();
        fragment.setArguments(args);
        return fragment;
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = super.onCreateView(inflater, container, savedInstanceState);
        // Retrieve the data here
        int boatId = getArguments().getInt(ARGUMENT_BOAT_ID);
        String ownerId = getArguments().getString(ARGUMENT_OWNER_ID);
        return view;
    }
}

并在 Adapter 类的onClick方法中修改块代码。

holder.boatList.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Fragment fragment = AddNewBoatFragment.newInstance(product.getId(), product.getOwner_id());
        FragmentManager fm = ((AppCompatActivity)mCtx).getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.dahsboard_fragment, fragment);
        ft.commit();
    }
});

您可以使用Bundle发送

        Fragment fragment = new AddNewBoatFragment();
        Bundle bundle = new Bundle();
        bundle.putString("myIDKey",product.getId());
        fragment.setArguments(bundle);
        FragmentManager fm = ((AppCompatActivity)mCtx).getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.dahsboard_fragment, fragment);
        ft.commit();

Fragment OnCreateView方法中,您可以获得附加参数并使用它

我只是把那些需要传递给片段的变量作为Public Static ,可以从任何其他类访问

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM