2017-11-11 191 views
-2

我正在使用RecyclerView来显示数据。在回收站视图中,我有方法onClick,我想在碎片之间进行替换。我唯一的问题是,我无法赞成getSupportFragmentManager或getChildFragmentManager静态方法。 RecyclerView位于片段内而不是活动。如何从静态方法调用getSupportFragmentManager?

这是RecyclerView代码

public static class TypeMusicListAdapter extends RecyclerView.Adapter<TypeMusicListViewHolder>{ 
    private LayoutInflater inflater; 
    private Context context; 
    private List<String> data; 

    public TypeMusicListAdapter(Context context, List<String> data){ 
     this.context = context; 
     this.inflater = LayoutInflater.from(context); 
     this.data = data; 
    } 

    @Override 
    public TypeMusicListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = inflater.inflate(R.layout.type_music_item,parent,false); 
     return new TypeMusicListViewHolder(v); 
    } 

    @Override 
    public void onBindViewHolder(TypeMusicListViewHolder holder, int position) { 
     String songType = data.get(position); 
     //holder.musicType.setText(songType.getSongName()); 
     holder.musicType.setText(songType); 
    } 

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

public static class TypeMusicListViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
    private TextView musicType; 
    private FragmentManager fm; 


    public TypeMusicListViewHolder(View itemView,FragmentManager fm) { 
     super(itemView); 
     musicType = (TextView) itemView.findViewById(R.id.musicType); 
     this.fm = fm; 
     musicType.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) { 

     getSupportFragmentManager(). 
       beginTransaction(). 
       replace(R.id.container, new GenresFragment()). 
       commit(); 
    } 
} 

给我的错误在getSupportFragmentManager ofcourse ... 我应该怎么办..?

回答

0

更改您的视图持有者类,使其具有您的活动的成员变量。

public static class TypeMusicListViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
    private TextView musicType; 
    private FragmentManager fm; 
AppCompatActivity activity; 

    public TypeMusicListViewHolder(View itemView,FragmentManager fm,AppCompatActivity act) { 
     super(itemView); 
     musicType = (TextView) itemView.findViewById(R.id.musicType); 
     this.fm = fm; 
activity = act; 
     musicType.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) { 

     activity.getSupportFragmentManager(). 
       beginTransaction(). 
       replace(R.id.container, new GenresFragment()). 
       commit(); 
    } 
} 
+0

我应该如何初始化AppCom当我从回收站带到外面的时候拍摄活动。顺便说一句,它在片段而不是活动。 –

0

您应该使用回调接口。

回调类

public interface MyCallback{ 

    void onButtonClick(); 
} 

ADAPTER

public static class TypeMusicListAdapter extends RecyclerView.Adapter<TypeMusicListViewHolder> implements View.OnClickListener{ 
private LayoutInflater inflater; 
private Context context; 
private List<String> data; 

public TypeMusicListAdapter(Context context, List<String> data){ 
    this.context = context; 
    this.inflater = LayoutInflater.from(context); 
    this.data = data; 
} 

@Override 
public TypeMusicListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = inflater.inflate(R.layout.type_music_item,parent,false); 
    return new TypeMusicListViewHolder(v); 
} 

@Override 
public void onBindViewHolder(TypeMusicListViewHolder holder, int position) { 
    String songType = data.get(position); 
    //holder.musicType.setText(songType.getSongName()); 
    holder.musicType.setText(songType); 

    holder.musicType.setOnClickListener(this); 
} 

@Override 
public void onClick(View view) { 

    ((YourActivity) context).onButtonClick(); 
} 

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

    public static class TypeMusicListViewHolder extends RecyclerView.ViewHolder { 
private TextView musicType; 
private FragmentManager fm; 


public TypeMusicListViewHolder(View itemView,FragmentManager fm) { 
    super(itemView); 
    musicType = (TextView) itemView.findViewById(R.id.musicType); 
    this.fm = fm; 
} 


} 

您的活动/片段

(...) 

void onButtonClick(){ 
    getSupportFragmentManager(). 
      beginTransaction(). 
      replace(R.id.container, new GenresFragment()). 
      commit(); 
}