【问题标题】:Generating text in a new fragment based on Firebase getRef()基于 Firebase getRef() 在新片段中生成文本
【发布时间】: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


    【解决方案1】:

    您可以使用参数将其传递给您的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*/
    
    }
    

    【讨论】:

      猜你喜欢
      • 2023-02-01
      • 1970-01-01
      • 2019-11-08
      • 1970-01-01
      • 2013-12-15
      • 2020-08-09
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      相关资源
      最近更新 更多