有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将项目位置适配器发送到片段并将片段发送到活动

我的代码有问题,我希望首先适配器单击片段中的项位置,然后这个位置希望从片段到主活动我在主活动中实现了一些设计。所以我想从模型类中得到一些数据,在这个位置,我已经实现了适配器点击,并成功地在片段中接收到了数据,但现在我想把这个位置片段保存起来。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) 个答案

  1. # 1 楼答案

    您必须在活动中实现回调

    声明回调接口:

    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);
        }
    

    有关更多信息check this

  2. # 2 楼答案

    在你的活动中创建一个公共方法,比如

    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();
        }// 
    
  3. # 3 楼答案

    这很简单,做这个;-

    @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");