使用Fragments+viepage和recyclerView创建ActionBar选项卡



大家好,我是安卓的新手,所以请耐心等待!

我使用下面的例子创建了一个回收视图,其中有四个选项卡片段,每个片段都显示了我正在为其创建应用程序的本地团队的列表(卡片视图(。

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

我的碎片

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);
LinearLayoutManager llm = new LinearLayoutManager(getActivity());
rv.setLayoutManager(llm);
return rootView;
}

}

我已经尝试了各种方法来实现这一点,但我一直面临错误或贬值的代码。

有人能把我链接到教程吗;这将帮助我或帮助我编写一些代码来解决这个问题!提前感谢

您可以在适配器中创建一个接口,如onItemClickedListener,方法onItemClicked(int position)和适配器中的公共方法setOnItemClickListener,从您的片段初始化适配器中的onItemClickedListener实例,并在onBindViewHolder中添加setOnClickListener,检查onItemClickListener是否为空,然后调用方法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;
}
}

最新更新