调用片段来自recyclerView适配器

时间:2017-01-30 20:52:43

标签: android fragment

  1. 列表项
  2. 我想在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;
    }
    

    }

3 个答案:

答案 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();


        }
    });