我有一个列表视图,可以生成爱丁堡的俱乐部列表,包括图像,标题和特殊优惠。当用户点击俱乐部时,他们希望看到更多关于新片段打开的信息,并且有关该俱乐部的数据。我能够使用getRef()获取正确的子名称并将其输出为toast,问题是如何使用当用户单击列表时我的textViews会自动填充相应的数据?
这是我的ClubList片段
public class ClubListFragment extends Fragment {
private RecyclerView clubList;
private DatabaseReference mDatabase;
public ClubListFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_club_list, container, false);
mDatabase = FirebaseDatabase.getInstance().getReference().child("clubs");
mDatabase.keepSynced(true);
//declare and populate the clublist view
clubList = (RecyclerView) rootView.findViewById(R.id.lstClub_List);
clubList.setHasFixedSize(true);
clubList.setLayoutManager(new LinearLayoutManager(getActivity()));
return rootView;
}
@Override
public void onStart() {
super.onStart();
FirebaseRecyclerAdapter<Clubs, ClubListHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Clubs, ClubListHolder>(
Clubs.class,
R.layout.club_row,
ClubListHolder.class,
mDatabase
)
{
@Override
protected void populateViewHolder(ClubListHolder viewHolder, Clubs model, int position) {
final String post_key = getRef(position).getKey();
viewHolder.setTitle(model.getTitle());
viewHolder.setOpen(model.getOpen());
viewHolder.setDesc1("*" + model.getDesc1());
viewHolder.setDesc2("*" + model.getDesc2());
viewHolder.setDesc3("*" + model.getDesc3());
viewHolder.setImage(getActivity(), model.getImage());
viewHolder.nView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), post_key , Toast.LENGTH_SHORT).show();
ClubInfoFragment fragment = new ClubInfoFragment();
android.support.v4.app.FragmentTransaction fragmentTransaction =
getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, fragment);
fragmentTransaction.commit();
}
});
}
};
clubList.setAdapter(firebaseRecyclerAdapter);
}
public static class ClubListHolder extends RecyclerView.ViewHolder{
View nView;
public ClubListHolder(View itemView) {
super(itemView);
nView = itemView;
}
public void setTitle(String title) {
TextView club_title = (TextView) nView.findViewById(R.id.txtTitle);
club_title.setText(title);
}
public void setOpen(String open) {
//finds day of the week and converts it to a string
String day;
SimpleDateFormat dayFormat = new SimpleDateFormat("EEEE", Locale.UK);
Calendar calendar = Calendar.getInstance();
day = dayFormat.format(calendar.getTime());
//find the Open/Closed Today TextView
TextView club_open = (TextView) nView.findViewById(R.id.txtOpen);
//parses the database for a day that macthes the current day, if found then...
if (open.contains(day)){
club_open.setText("Open Today");
((TextView) nView.findViewById(R.id.txtOpen)).setTextColor(Color.GREEN);
}
//else do this
else
{
club_open.setText("Closed Today");
((TextView) nView.findViewById(R.id.txtOpen)).setTextColor(Color.RED);
}
}
public void setDesc1(String desc1) {
TextView club_desc1 = (TextView) nView.findViewById(R.id.txtDesc1);
club_desc1.setText(desc1);
}
public void setDesc2(String desc2) {
TextView club_desc2 = (TextView) nView.findViewById(R.id.txtDesc2);
club_desc2.setText(desc2);
}
public void setDesc3(String desc3) {
TextView club_desc3 = (TextView) nView.findViewById(R.id.txtDesc3);
club_desc3.setText(desc3);
}
public void setImage(Context ctx, String image) {
ImageView club_image = (ImageView) nView.findViewById(R.id.imgClub);
Picasso.with(ctx).load(image).into(club_image);
}
}
}
我应该以某种方式保存Firebase引用并使其成为一个全局变量,然后在新的片段中使用,或者有没有办法从我的ClubListFragment中执行它?
感谢任何帮助
答案 0 :(得分:0)
您可以使用参数将其传递给ClubInfoFragment:
Bundle clubObjBundle=new Bundle();
clubObjBundle.putSerializable("mymodel",model);
ClubInfoFragment fragment = new ClubInfoFragment();
fragment.setArguments(clubObjBundle);
FragmentTransaction ft=getActivity().getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, fragment);
ft.commit();
在ClubInfoFragment's
oncreate方法中,您可以获取所有详细信息,而无需再拨打另一个firebase。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if(getArguments!=null){
Bundle bundle=getArguments();
Clubs model=(Clubs)bundle.getSerializable("mymodel");
}
/*call and use your setTitle,setDesc1 etc on model object */
}
还要确保您的Clubs
班级实施Serializable
public class Clubs implements Serializable {`
/*keep content as it is*/
}