从 recyclerView 适配器调用片段

a.s*_*ata 6 android fragment

我想在imageItem单击时 调用片段getSupportFragmentManger不能调用 hera 并且在适配器构造函数中传递它时也无法工作

   public class MarketOneRecyclerAdapter extends       RecyclerView.Adapter<MarketOneRecyclerAdapter.MainViewHolder>{                                          
                                                                                                                                                      
       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;
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 5

持有人是 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();


        }
    });
Run Code Online (Sandbox Code Playgroud)

  • 这是一个糟糕的主意,原因如下。持有人不得自行采取任何行动。在您的情况下,您无法控制点击时发生的情况。您应该将侦听器设置为发生在持有者内部的任何操作,并在适配器外部(在片段/活动/视图中)处理它。只需将侦听器传递给适配器,然后将其传递给“onCreateViewHolder()”中的持有者即可。这样您就可以控制业务逻辑,并且 SOLID 原则将得到尊重 (3认同)