Как передать переменную из адаптера в фрагмент? - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть обзор переработчика. После того, как пользователь щелкнет по любому элементу в программе повторного просмотра, он должен открыть новый фрагмент. Но я хотел бы передать ему идентификатор, как мы отправляем с намерением, используя 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; }

Ответы [ 3 ]

0 голосов
/ 03 ноября 2018

Я просто поставил те переменные, которые нужно передать фрагменту, как Public Static к которому можно получить доступ из любого другого класса

0 голосов
/ 03 ноября 2018

Вы должны объявить статический метод в 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;
    }
}

И измените код блока в методе onClick из класса Adapter.

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();
    }
});
0 голосов
/ 03 ноября 2018

Вы можете отправить используя 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();

и в OnCreateView методе Fragment вы можете получить вложенные аргументы и использовать его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...