在装载点击CardView从RecyclerView片段 [英] Load a fragment on clicking CardView from RecyclerView
问题描述
我有一个 RecyclerView
和 CardView
里面。现在我想要做的是加载一个简单的片段
上点击CardView。我不能这样做与FragmentManager或SupportFragmentManager。请给我一些指示。
我的RecyclerViewAdapder和ViewHolder是..
公共类RecyclerViewAdapter扩展RecyclerView.Adapter< RecyclerViewAdapter.ViewHolder> {
私有String [] eventName的;
私有String [] eventBrief; 公共静态类ViewHolder扩展RecyclerView.ViewHolder { 公众的TextView textViewName,textViewBrief;
公共CardView cardView; 公共ViewHolder(视图v){
超级(五); textViewName =(TextView中)v.findViewById(R.id.textViewName);
textViewBrief =(TextView中)v.findViewById(R.id.textViewBrief);
最后上下文的背景下= v.getContext();
cardView =(CardView)v.findViewById(R.id.card_view); cardView.setOnClickListener(新View.OnClickListener(){
@覆盖
公共无效的onClick(查看视图){
EventFragment eventFragment = EventFragment.newInstance();
//装载这里查看eventFragment?
}
});
}
} 公共RecyclerViewAdapter(字符串[] eventName的,的String [] eventBrief){
this.eventName = eventName的;
this.eventBrief = eventBrief; } @覆盖
公共RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup中父母,
INT viewType){
视图V = LayoutInflater.from(parent.getContext())
.inflate(R.layout.my_card_view,父母,假);
返回新ViewHolder(V);
} @覆盖
公共无效onBindViewHolder(ViewHolder持有人,INT位置){
holder.textViewName.setText(eventName的[位置]);
holder.textViewBrief.setText(eventBrief [位置]);
} @覆盖
公众诠释getItemCount(){
返回eventName.length;
}
}
有很多方法去这个,真的。我觉得最好的实现是一个回调到活动通知项目已被点击。我给你一只手用一些code:
公共类RecyclerViewAdapter扩展RecyclerView.Adapter< RecyclerViewAdapter.ViewHolder> {
私有String [] eventName的;
私有String [] eventBrief;
私人OnItemClickListener侦听器;ViewHolder扩展RecyclerView.ViewHolder公共静态类实现View.OnClickListener { 公众的TextView textViewName,textViewBrief;
公共CardView cardView;
私人OnItemClickListener侦听器; 公共ViewHolder(视图V,OnItemClickListener听众){
超级(五); textViewName =(TextView中)v.findViewById(R.id.textViewName);
textViewBrief =(TextView中)v.findViewById(R.id.textViewBrief);
最后上下文的背景下= v.getContext();
cardView =(CardView)v.findViewById(R.id.card_view); cardView.setOnClickListener(新View.OnClickListener(){
@覆盖
公共无效的onClick(查看视图){
如果(听众!= NULL)
listener.onItemClick(textViewName.getText()。的toString()
textViewBrief.getText()的toString()。
}
});
}
}公共RecyclerViewAdapter(字符串[] eventName的,的String [] eventBrief){
this.eventName = eventName的;
this.eventBrief = eventBrief;}@覆盖
公共RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup中父母,
INT viewType){
视图V = LayoutInflater.from(parent.getContext())
.inflate(R.layout.my_card_view,父母,假);
返回新ViewHolder(V);
}@覆盖
公共无效onBindViewHolder(ViewHolder持有人,INT位置){
holder.textViewName.setText(eventName的[位置]);
holder.textViewBrief.setText(eventBrief [位置]);
holder.setOnItemClickListener(监听);
}@覆盖
公众诠释getItemCount(){
返回eventName.length;
}公共无效setOnItemClickListener(OnItemClickListener监听){
this.listener =监听器
}公共接口OnItemClickListener {
公共无效onItemClick(字符串textName,字符串textViewBrief);
}
}
然后在你的活动只是实例化它是这样的:
RecyclerViewAdapter适配器=新RecyclerViewAdapter(eventName的,eventBrief);
adapter.setOnItemClickListener(新RecyclerViewAdapter.OnItemClickListener(){
公共无效onItemClick(字符串textName,字符串textViewBrief){
EventFragment eventFragment = EventFragment.newInstance();
//用自己的观点替换内容框架。
FragmentTransaction英尺= getSupportFragmentManager()调用BeginTransaction()。 ft.replace(R.id.content_frame,eventFragment).commit()
}
});
I've a RecyclerView
and CardView
inside it. Now what i want to do is load a simple Fragment
on clicking the CardView. I'm not able to do that with FragmentManager or SupportFragmentManager. Please give me some directions.
My RecyclerViewAdapder and ViewHolder are ..
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
private String[] eventName;
private String[] eventBrief;
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView textViewName, textViewBrief;
public CardView cardView;
public ViewHolder(View v) {
super(v);
textViewName = (TextView)v.findViewById(R.id.textViewName);
textViewBrief = (TextView)v.findViewById(R.id.textViewBrief);
final Context context = v.getContext();
cardView = (CardView)v.findViewById(R.id.card_view);
cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EventFragment eventFragment = EventFragment.newInstance();
// Load and view eventFragment here??
}
});
}
}
public RecyclerViewAdapter(String[] eventName, String[] eventBrief) {
this.eventName = eventName;
this.eventBrief = eventBrief;
}
@Override
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.my_card_view, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.textViewName.setText(eventName[position]);
holder.textViewBrief.setText(eventBrief[position]);
}
@Override
public int getItemCount() {
return eventName.length;
}
}
There are many ways to go at this, really. I feel that the best implementation is a callback to the activity notifying that an item has been clicked. I'll give you a hand with some code:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
private String[] eventName;
private String[] eventBrief;
private OnItemClickListener listener;
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView textViewName, textViewBrief;
public CardView cardView;
private OnItemClickListener listener;
public ViewHolder(View v, OnItemClickListener listener) {
super(v);
textViewName = (TextView)v.findViewById(R.id.textViewName);
textViewBrief = (TextView)v.findViewById(R.id.textViewBrief);
final Context context = v.getContext();
cardView = (CardView)v.findViewById(R.id.card_view);
cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(listener!=null)
listener.onItemClick(textViewName.getText().toString(),
textViewBrief.getText().toString();
}
});
}
}
public RecyclerViewAdapter(String[] eventName, String[] eventBrief) {
this.eventName = eventName;
this.eventBrief = eventBrief;
}
@Override
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.my_card_view, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.textViewName.setText(eventName[position]);
holder.textViewBrief.setText(eventBrief[position]);
holder.setOnItemClickListener(listener);
}
@Override
public int getItemCount() {
return eventName.length;
}
public void setOnItemClickListener(OnItemClickListener listener){
this.listener = listener
}
public interface OnItemClickListener{
public void onItemClick(String textName, String textViewBrief);
}
}
Then in your activity just instantiate it like this:
RecyclerViewAdapter adapter = new RecyclerViewAdapter(eventName, eventBrief);
adapter.setOnItemClickListener(new RecyclerViewAdapter.OnItemClickListener(){
public void onItemClick(String textName, String textViewBrief){
EventFragment eventFragment = EventFragment.newInstance();
//replace content frame with your own view.
FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.replace(R.id.content_frame, eventFragment).commit()
}
});
这篇关于在装载点击CardView从RecyclerView片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!