我想在imageItem上点击调用片段 getSupportFragmentManger无法调用hera,当在适配器构造函数中传递它时也无法工作
公共类MarketOneRecyclerAdapter扩展了RecyclerView.Adapter {
public interface OnItemClickListener {
void onItemClick(ArrayList< MarketItems> item, int Pos);
}
private final OnItemClickListener listener;
private ArrayList<MarketItems>marketArrayList;
private Context context;
public MarketOneRecyclerAdapter(Context context, ArrayList<MarketItems> marketArrayList, OnItemClickListener listener) {
this.listener = listener;
this.context = context;
this.marketArrayList = marketArrayList;
}
@Override
public MainViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.market_item, parent, false);
return new MarketOneRecyclerAdapter.MainViewHolder(view);
}
@Override
public void onBindViewHolder(MainViewHolder holder, int position) {
holder.bind(marketArrayList,listener,position);
}
@Override
public int getItemCount() {
return marketArrayList.size();
}
public class MainViewHolder extends RecyclerView.ViewHolder{
ImageView imageItem;
CardView cardView;
public MainViewHolder(View itemView) {
super(itemView);
cardView= (CardView) itemView.findViewById(R.id.market_card_view);
imageItem= (ImageView) itemView.findViewById(R.id.market_item_imageView);
imageItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Want here call a fragment
}
});
}
public void bind(final ArrayList<MarketItems> item, final OnItemClickListener listener , final int i){
Picasso.with(context).load(marketArrayList.get(i).getImages()).networkPolicy(NetworkPolicy.OFFLINE).into(imageItem);
imageItem.setTag(item.get(i).getImages());
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listener.onItemClick(item,i);
`enter code here` }
});
}
}
}
public class ImageItemFragment extends Fragment { ImageView imageView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view =inflater.inflate(R.layout.fragment_image_item, container, false);
imageView= (ImageView) view.findViewById(R.id.market_item_image);
//Picasso.with(getActivity()).load(marketItems.getImages()).networkPolicy(NetworkPolicy.OFFLINE).into(imageView);
return view;
}
}
答案 0 :(得分:1)
大多数开发人员在调用Fragment时都会感到困惑,但是我有两种方法可以从Recycler适配器转移到Fragment。 要从回收站适配器移动到片段,我们需要片段名称和片段支持管理器库,然后我们将使用添加,替换等方法。 因此,如果您有两种方式: 如果您使用的是直接基于POJO类的Fragment,则可以使用
Youractivity.viewpager.setCurrentItem(position);
像我的
MainActivity.viewPager2.setCurrentItem(0);
这里0是我的片段位置。 假设如果您按照Android文档使用Fragment,那么我们将使用:
FragmentManager manager = ((AppCompatActivity)mcontext).getSupportFragmentManager();
Tab1 tab1 = new Tab1();
manager.beginTransaction().replace(R.id.container,tab1)
.commit();
Tab1是我的片段名称,我为我的Fragment创建一个实例,R.id.container是我的容器ID。大多数开发人员都不知道如何获取容器ID,所以有很多方法,但是最简单的方法是,转到您的片段并检查fragment中的onCreateView,就像这样:
View view=inflater.inflate(R.layout.community,container,false);
希望这对您有用,如果您有任何问题,请评论我。享受!!!
答案 1 :(得分:1)
在Kotlin中,您可以使用此
holder.setOnClickListener{it:View!
val appCompatActivity = it.context as AppCompatActivity
appCompatActivity.supportFragmentManager.
beginTransaction()
.replace(R.id.frameLayout, YourFragment())
.addToBackStack(null)
.commit()
}
`
答案 2 :(得分:0)
持有人是ViewHolder inOnBindViewHolder
holder.image_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AppCompatActivity activity = (AppCompatActivity) v.getContext();
Fragment myFragment = new TaskApprovalFragmentDetails();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.linearlayouttaskapproval, myFragment).addToBackStack(null).commit();
}
});