【发布时间】:2017-05-11 09:15:18
【问题描述】:
我有一个列表视图,可以生成爱丁堡俱乐部的列表,包括图片、名称和特价。当用户点击俱乐部时,他们希望看到更多关于新片段的信息,该片段打开并由有关该俱乐部的数据填充。我能够使用 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 中做到这一点?
感谢任何帮助
【问题讨论】:
标签: android android-fragments firebase firebase-realtime-database