Как отправить элемент позиции Адаптер к фрагменту и фрагмент к активности - PullRequest
1 голос
/ 23 мая 2019

У меня есть проблема в моем коде. Я хочу сначала позицию элемента щелчка Адаптера во фрагменте, а затем эту позицию хочу от фрагмента до MainActivity. Я реализовал некоторый дизайн в моем main_activity.xml, поэтому я хочу получить некоторые данные из класса модели по этой позиции, которую я имеюдобиться перехода по адаптеру и успешно получил фрагмент, но теперь я хочу, чтобы этот фрагмент позиции находился в MainActivty.java под моими кодами

Мой класс адаптера

public class RvAdapter extends RecyclerView.Adapter<RvAdapter.ProductViewHolder> {

private Context mCtx;
private List<DataModal> productList;
private OnItemClickReturnData mListener;

public interface OnItemClickReturnData{
    public void OnItemClick(int position);
}
public void setOnClickListener(OnItemClickReturnData listener)
{
    mListener = listener;
}
public RvAdapter(Context mCtx, List<DataModal> productList) {
    this.mCtx = mCtx;
    this.productList = productList;
}

@NonNull
@Override
public ProductViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(mCtx);
    @SuppressLint("InflateParams") View view = inflater.inflate(R.layout.song_handle_layout, null);
    return new ProductViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull final ProductViewHolder holder, @SuppressLint("RecyclerView") final int position) {
    final DataModal product = productList.get(position);
    webUrl = "https://musicsongs.000webhostapp.com/";
    Glide.with(mCtx)
            .load(webUrl + product.getpics())
            .into(holder.dp);

    holder.pic.setText(product.getpic());
    holder.pics.setText(product.getdp());
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        @Override
        public void onClick(View v) {
            if (mListener != null)
            {
                mListener.OnItemClick(position);
            }
            else {
                Toast.makeText(mCtx, "mListeren is null" + mListener, Toast.LENGTH_SHORT).show();
            }
        }
    });
}

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

class ProductViewHolder extends RecyclerView.ViewHolder{

    TextView textViewTitle, textViewShortDesc;
    ImageView imageView;

    ProductViewHolder(View itemView) {
        super(itemView);

        pic= itemView.findViewById(R.id.pic);
        pics = itemView.findViewById(R.id.pics);
        dp = itemView.findViewById(R.id.dp);
    }
}
}

МойФрагмент

public class MainActivityMusicFragment extends Fragment implements RvAdapter.OnItemClickReturnData {

}// i have achieve Adapter click in fragment by implements click method


@Override
public void OnItemClick(int position) {

        Toast.makeText(getActivity(), "Posiotion OnClick in Adapter HAndle in Fragment" + position, Toast.LENGTH_SHORT).show();
    }// i have received position in fragment but how can i send this position fragment to activity please help me

Ответы [ 3 ]

0 голосов
/ 23 мая 2019

это так просто сделать; -

@Override
public void OnItemClick(int position) {

// this is for your fragment
    Bundle  bundle = new Bundle();
            Intent intent = new Intent(getActivity(), yourActivity.clss);
            bundle.putString("position", position);
            setArguments(bundle);
            startActivity(intent);


        Toast.makeText(getActivity(), "Posiotion OnClick in Adapter HAndle in Fragment" + position, Toast.LENGTH_SHORT).show();
    }


// this is for your activity
String pos = getIntent().getStringExtra("position");
0 голосов
/ 23 мая 2019

Вы должны включить обратный вызов в вашей деятельности

объявить интерфейс для обратного вызова:

interface OnMainActivityMusicFragmentListener{
  void onItemSelected(int position);
}

Реализация OnMainActivityMusicFragmentListener в вашей деятельности

class MainActivity extends AppCompactActivity implements OnMainActivityMusicFragmentListener{
----
}

Запустить обратный звонок из фрагмента

private OnMainActivityMusicFragmentListener listener:
@Override
    public void onAttach(Context context) {
        super.onAttach(context);
        listener = (OnMainActivityMusicFragmentListener) context;
    }
// pass your position to activity
@Override
public void OnItemClick(int position) {

        Toast.makeText(getActivity(), "Posiotion OnClick in Adapter HAndle in Fragment" + position, Toast.LENGTH_SHORT).show();
        listener.onItemSelected(position);
    }

Для получения дополнительной информации отметьте это .

0 голосов
/ 23 мая 2019

создайте публичный метод в вашей деятельности, такой как

public void OnItemClickActivity(int position) {

    Toast.makeText(this, "Posiotion OnClick in Activity" + position, Toast.LENGTH_SHORT).show();
}

, а затем в своем фрагменте добавьте

@Override
public void OnItemClick(int position) {
       ((MainActivity) getActivity()).OnItemClickActivity(position)
        Toast.makeText(getActivity(), "Posiotion OnClick in Adapter HAndle in Fragment" + position, Toast.LENGTH_SHORT).show();
    }// 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...