Android 创建带有片段的ActionBar选项卡+;viepage和recyclerView
大家好,我是安卓的noob,所以请容忍我 我使用下面的示例创建了一个recyclerview,其中包含四个选项卡式片段,每个片段显示我正在为其创建应用程序的本地团队的列表(卡片视图) 我想在每个片段中添加一个onclicklistener,并尝试使用if position方法,就像我几年前创建类似应用时所做的那样,但get position方法被贬低了 我知道我可以在适配器中放置onviewbind方法,但我被告知这不是最好的方法(我无法使它工作)点击监听器应该放在片段中,因为这允许您重用适配器,当有人在其中一个片段中进行选择时,我希望在另一个片段中创建另一个列表,该列表将包含一个可扩展的列表 我的适配器Android 创建带有片段的ActionBar选项卡+;viepage和recyclerView,android,android-fragments,android-recyclerview,android-cardview,Android,Android Fragments,Android Recyclerview,Android Cardview,大家好,我是安卓的noob,所以请容忍我 我使用下面的示例创建了一个recyclerview,其中包含四个选项卡式片段,每个片段显示我正在为其创建应用程序的本地团队的列表(卡片视图) 我想在每个片段中添加一个onclicklistener,并尝试使用if position方法,就像我几年前创建类似应用时所做的那样,但get position方法被贬低了 我知道我可以在适配器中放置onviewbind方法,但我被告知这不是最好的方法(我无法使它工作)点击监听器应该放在片段中,因为这允许您重用适配
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private String[] mDataset;
public static class MyViewHolder extends RecyclerView.ViewHolder{
public CardView mCardView;
public TextView mTextView;
public MyViewHolder(View v){
super(v);
mCardView = (CardView) v.findViewById(R.id.card_view);
mTextView = (TextView) v.findViewById(R.id.tv_text);
}
}
public MyAdapter(String[] myDataset){
mDataset = myDataset;
}
@Override
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_item, parent, false);
MyViewHolder vh = new MyViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position){
holder.mTextView.setText(mDataset[position]);
}
@Override
public int getItemCount() { return mDataset.length; }
}
我尝试了各种方法来让它工作,但我一直面临着错误或贬值的代码
有人能把我和教程联系起来吗;这将帮助我或帮助我用一些代码来解决这个问题!提前感谢您可以在适配器中创建一个接口,如使用方法
onItemClicked(int位置)
的onItemClickedListener
和适配器中的公共方法setonitemclickedListener
从片段初始化适配器中的onItemClickedListener
,在onBindViewHolder
addsetOnClickListener
中,检查onItemClickListener
是否不为null,然后调用方法onItemClicked(int位置)
,代码如下所示
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private String[] mDataset;
private onItemClickListener onItemClickListener;
interface onItemClickListener{
void onItemClicked(int position)
}
public void setOnItemClickListener(onItemClickListener
onItemClickListener){
this.onItemClickListener = onItemClickListener;
}
public static class MyViewHolder extends RecyclerView.ViewHolder{
public CardView mCardView;
public TextView mTextView;
public MyViewHolder(View v){
super(v);
mCardView = (CardView) v.findViewById(R.id.card_view);
mTextView = (TextView) v.findViewById(R.id.tv_text);
}
}
public MyAdapter(String[] myDataset){
mDataset = myDataset;
}
@Override
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_item, parent, false);
MyViewHolder vh = new MyViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position){
holder.mTextView.setText(mDataset[position]);
holder.mTextView.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
if (onItemClickListener != null) {
onItemClickListener.onItemClicked(position);
}
}
});
}
@Override
public int getItemCount() { return mDataset.length; }
}
你想做什么?您想让一个侦听器在单击列表中的某个项目时收到通知吗?我想在单击列表中的某个项目时启动另一个活动,然后,我计划使用另一个适配器或同一个采纳者创建另一个列表视图,该列表视图具有可扩展列表,如果可能的话。我尝试了此操作,结果显示无法解析方法setonitemclicklistener匿名视图。查看myadapter中的onclicklistener,无法解析fragmentmy bad中的onclicklister,您必须在适配器上设置OnItemClickListener,在onBindViewHolder中设置OnClickListener,我已经修复了它没有问题我感谢您在MyAdapter类中的帮助它说onBindViewHolder中的intposition应该设置为final当我这样做时,代码是OK的,但在片段中它仍然在这一行上说adapter.setOnItemClickListener(新建MyAdapter.OnItemClickListener)无法解析OnItemClickListener.ya如果要在接口实现中使用变量,则必须是最终变量。是否在MyAdapter中创建了接口,
interface OnItemClickListener{void onItemClicked(int position)}
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private String[] mDataset;
private onItemClickListener onItemClickListener;
interface onItemClickListener{
void onItemClicked(int position)
}
public void setOnItemClickListener(onItemClickListener
onItemClickListener){
this.onItemClickListener = onItemClickListener;
}
public static class MyViewHolder extends RecyclerView.ViewHolder{
public CardView mCardView;
public TextView mTextView;
public MyViewHolder(View v){
super(v);
mCardView = (CardView) v.findViewById(R.id.card_view);
mTextView = (TextView) v.findViewById(R.id.tv_text);
}
}
public MyAdapter(String[] myDataset){
mDataset = myDataset;
}
@Override
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_item, parent, false);
MyViewHolder vh = new MyViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position){
holder.mTextView.setText(mDataset[position]);
holder.mTextView.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
if (onItemClickListener != null) {
onItemClickListener.onItemClicked(position);
}
}
});
}
@Override
public int getItemCount() { return mDataset.length; }
}
public class BlankFragment extends Fragment {
public BlankFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_blank, container, false);
RecyclerView rv = (RecyclerView) rootView.findViewById(R.id.rv_recycler_view);
rv.setHasFixedSize(true);
MyAdapter adapter = new MyAdapter(new String[]{"Example One", "Example Two", "Example Three", "Example Four", "Example Five" , "Example Six" , "Example Seven"});
rv.setAdapter(adapter);
adapter.setOnItemClickListener(new MyAdapter.onItemClickListener){
@Override
public void onItemClicked(int pos) {
// DO here what you want ot do on item clicked
}
});
LinearLayoutManager llm = new LinearLayoutManager(getActivity());
rv.setLayoutManager(llm);
return rootView;
}
}