Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 单击片段中包含的RecyclerView中的项目,打开包含传递数据的新活动_Android_Android Fragments_Onclick_Android Recyclerview - Fatal编程技术网

Android 单击片段中包含的RecyclerView中的项目,打开包含传递数据的新活动

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

我有一个MainActivity和三个片段,其中包含recyclerViews,recyclerViews包含两个文本视图,我希望用户单击recyclerview,其中的文本应传递给新活动,我有点新,因此如果您能给我详细的代码和一些解释,我将不胜感激

我想单击recyclerview中的一个项目,它将打开一个新活动,数据(文本)将从recyclerview传递到新活动

下面是我的hymnodel.java代码

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);
        }
    }