Android 单击片段中包含的RecyclerView中的项目,打开包含传递数据的新活动
我有一个MainActivity和三个片段,其中包含recyclerViews,recyclerViews包含两个文本视图,我希望用户单击recyclerview,其中的文本应传递给新活动,我有点新,因此如果您能给我详细的代码和一些解释,我将不胜感激 我想单击recyclerview中的一个项目,它将打开一个新活动,数据(文本)将从recyclerview传递到新活动 下面是我的hymnodel.java代码Android 单击片段中包含的RecyclerView中的项目,打开包含传递数据的新活动,android,android-fragments,onclick,android-recyclerview,Android,Android Fragments,Onclick,Android Recyclerview,我有一个MainActivity和三个片段,其中包含recyclerViews,recyclerViews包含两个文本视图,我希望用户单击recyclerview,其中的文本应传递给新活动,我有点新,因此如果您能给我详细的代码和一些解释,我将不胜感激 我想单击recyclerview中的一个项目,它将打开一个新活动,数据(文本)将从recyclerview传递到新活动 下面是我的hymnodel.java代码 public class HymnModel { String title; Str
public class HymnModel {
String title;
String song;
HymnModel(String title, String song){
this.title=title;
this.song=song;
}
public String getTitle() {return title;
}
public String getSong() {
return song;
}
}
下面是ItemVeiwHolder.java的代码
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;
import com.tutorialsbuzz.recyclerview.R;
public class ItemViewHolder extends RecyclerView.ViewHolder {
public TextView title_textview;
public TextView song_textview;
public ItemViewHolder(View itemView) {
super(itemView);
itemView.setClickable(true);
title_textview = (TextView) itemView.findViewById(R.id.song_title);
song_textview = (TextView) itemView.findViewById(R.id.song);
}
public void bind(HymnModel hymnModel) {
title_textview.setText(hymnModel.getTitle());
song_textview.setText(hymnModel.getSong());
}
}
这是我的适配器类
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.tutorialsbuzz.recyclerview.R;
import java.util.ArrayList;
import java.util.List;
public class RVAdapter extends RecyclerView.Adapter<ItemViewHolder> {
private List<HymnModel> mCountryModel;
private List<HymnModel> mOriginalCountryModel;
public RVAdapter(List<HymnModel> mCountryModel) {
this.mCountryModel = mCountryModel;
this.mOriginalCountryModel = mCountryModel;
}
@Override
public void onBindViewHolder(ItemViewHolder itemViewHolder, int i) {
final HymnModel model = mCountryModel.get(i);
itemViewHolder.bind(model);
}
@Override
public ItemViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_row, viewGroup, false);
return new ItemViewHolder(view);
}
@Override
public int getItemCount() {
return mCountryModel.size();
}
public void setFilter(List<HymnModel> countryModels){
mCountryModel = new ArrayList<>();
mCountryModel.addAll(countryModels);
notifyDataSetChanged();
}
}
最后是我的ViewPageAdapter
public class ViewPagerAdapter extends FragmentStatePagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
}
公共类ViewPagerAdapter扩展了FragmentStatePagerAdapter{
私有最终列表MFFragmentList=new ArrayList();
私有最终列表MFFragmentTitleList=new ArrayList();
公共ViewPagerAdapter(碎片管理器fm){
超级(fm);
}
@凌驾
公共片段getItem(int位置){
返回MFFragmentList.get(位置);
}
@凌驾
public int getCount(){
返回MFFragmentList.size();
}
@凌驾
公共字符序列getPageTitle(int位置){
返回MFFragmentTitleList.get(位置);
}
public void addFragment(片段片段,字符串标题){
添加(片段);
MFFragmentTitleList.add(标题);
}
}
谢谢。您好首先,您总是希望从活动或片段开始您的活动。 切勿从适配器启动它 因此,在适配器构造函数中添加以下内容
public AdapterName(......,Context context){
...your code.
this.mContext=context;
}
在那里传递上下文
而不是在这个方法里面
public ItemViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(mContext instanceof YourActivityName){
((YourActivityName)mContext).yourDesiredMethod();
}
}
});
public interface OnHymnClickListener {
void onHymnClick(HymnModel hymnModel);
}
public class RVAdapter extends RecyclerView.Adapter<ItemViewHolder> {
private OnHymnClickListener listener;
public void setListener(OnHymnClickListener listener) {
this.listener = listener;
}
@Override
public void onBindViewHolder(ItemViewHolder itemViewHolder, int i) {
final HymnModel model = mCountryModel.get(i);
itemViewHolder.bind(model);
itemViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(listener != null) {
listener.onHymnClick(model);
}
}
});
}
}
title_textview..setOnClickListener(新视图.OnClickListener());关于活页夹功能工作?(来自ItemViewHolder)我应该在哪里创建界面?我创建了界面并添加了必要的代码,但我希望单击打开一个新活动,如SingleHymnViewActivity。java@winfredadrah参考此答案,将这些代码放入片段中的方法
onHymnClick
。如果要将HymnModel发送到SingleHymnViewActivity,则HymnModel需要实现Parcelable
,请参见此
public interface OnHymnClickListener {
void onHymnClick(HymnModel hymnModel);
}
public class RVAdapter extends RecyclerView.Adapter<ItemViewHolder> {
private OnHymnClickListener listener;
public void setListener(OnHymnClickListener listener) {
this.listener = listener;
}
@Override
public void onBindViewHolder(ItemViewHolder itemViewHolder, int i) {
final HymnModel model = mCountryModel.get(i);
itemViewHolder.bind(model);
itemViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(listener != null) {
listener.onHymnClick(model);
}
}
});
}
}
public class TabOneFragment extends Fragment implements SearchView.OnQueryTextListener, OnHymnClickListener {
@Override
public void onHymnClick(HymnModel hymnModel) {
//put data to bundle and startActivity
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
adapter = new RVAdapter(mHymnModel);
adapter.setListener(this);
recyclerview.setAdapter(adapter);
}
}