Хотите обновить существующий список в фрагменте, нажав пункт меню - PullRequest
0 голосов
/ 23 ноября 2018

Я создаю приложение для поиска ближайших доноров крови.В этом приложении я использую три фрагмента для быстрой навигации.В одном фрагменте отображается список доступных доноров, но я хочу изменить список из списка меню, нажав на определенную группу крови. Первый список - это то, что когда я нажимаю на элементы, он ничего не показывает.

Javacode:

public class DonorsFragment extends Fragment {

    SwipeMenuListView listView;
    FirebaseListAdapter adapter;
    TextView fullName,bloodGroup,gender,age,address;
    Query query;
    View rootView;

    FirebaseListOptions<DonorAdapterClass> options;


    public DonorsFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setHasOptionsMenu(true);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

         rootView =inflater.inflate(R.layout.fragment_donors, container, false);

        listView = rootView.findViewById(R.id.listview);


Toast.makeText(getActivity(),"oncreateview",Toast.LENGTH_SHORT).show();

         query =FirebaseDatabase.getInstance().getReference().child("Users");

         setQuery(query);



        SwipeMenuCreator creator = new SwipeMenuCreator() {

            @Override
            public void create(SwipeMenu menu) {

                // create "delete" item
                SwipeMenuItem deleteItem = new SwipeMenuItem(getActivity());
                // set item background
                deleteItem.setBackground(new ColorDrawable(Color.rgb(0xF9,
                        0x3F, 0x25)));
                // set item width
                deleteItem.setWidth(170);
                // set a icon
                deleteItem.setIcon(R.drawable.ic_phone);
                // add to menu
                menu.addMenuItem(deleteItem);
            }
        };

        listView.setMenuCreator(creator);

        listView.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(int position, SwipeMenu menu, int index) {
                switch (index) {
                    case 0:
                        // open

                        Toast.makeText(getActivity(),"Item Clicked",Toast.LENGTH_SHORT).show();
                        break;
                }
                // false : close the menu; true : not close the menu
                return false;
            }
        });

        // Inflate the layout for this fragment
        return rootView;

    }

    @Override
    public void onStart() {
        super.onStart();
        adapter.startListening();
    }

    @Override
    public void onStop() {
        super.onStop();
        adapter.stopListening();
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.blood_group_menu,menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()){

            case R.id.a_pos: {
                Toast.makeText(getActivity(),"A+",Toast.LENGTH_SHORT).show();
                query=FirebaseDatabase.getInstance().getReference().child("Users").orderByChild("canGive_A_Pos").equalTo("yes");
                setQuery(query);
                break;
            }

            case R.id.a_neg: {
                Toast.makeText(getActivity(),"A-",Toast.LENGTH_SHORT).show();
                query=FirebaseDatabase.getInstance().getReference().child("Users").orderByChild("canGive_A_Neg").equalTo("yes");
                setQuery(query);
                break;
            }


            case R.id.b_pos: {
                Toast.makeText(getActivity(),"B+",Toast.LENGTH_SHORT).show();
                query=FirebaseDatabase.getInstance().getReference().child("Users").orderByChild("canGive_B_Pos").equalTo("yes");
                setQuery(query);
                break;
            }

            case R.id.b_neg: {
                Toast.makeText(getActivity(),"B-",Toast.LENGTH_SHORT).show();
                query=FirebaseDatabase.getInstance().getReference().child("Users").orderByChild("canGive_B_Neg").equalTo("yes");
                setQuery(query);
                break;
            }

            case R.id.ab_pos: {
                Toast.makeText(getActivity(),"AB+",Toast.LENGTH_SHORT).show();
                query=FirebaseDatabase.getInstance().getReference().child("Users").orderByChild("canGive_A_Pos").equalTo("yes");
                setQuery(query);
                break;
            }

            case R.id.ab_neg: {
                Toast.makeText(getActivity(),"AB-",Toast.LENGTH_SHORT).show();
                query=FirebaseDatabase.getInstance().getReference().child("Users");
                setQuery(query);
                break;
            }

            case R.id.o_pos: {
                Toast.makeText(getActivity(),"O+",Toast.LENGTH_SHORT).show();
                query=FirebaseDatabase.getInstance().getReference().child("Users").orderByChild("canGive_O_Pos").equalTo("yes");
                setQuery(query);
                break;
            }

            case R.id.o_neg: {
                Toast.makeText(getActivity(),"O-",Toast.LENGTH_SHORT).show();
                query=FirebaseDatabase.getInstance().getReference().child("Users").orderByChild("canGive_O_Neg").equalTo("yes");
                setQuery(query);
                break;
            }

            case R.id.list_all: {
                Toast.makeText(getActivity(),"All",Toast.LENGTH_SHORT).show();
                query=FirebaseDatabase.getInstance().getReference().child("Users");
                setQuery(query);
                break;
            }

        }
        return super.onOptionsItemSelected(item);
    }


    public void setQuery(Query query){

        listView = rootView.findViewById(R.id.listview);

        options = new FirebaseListOptions.Builder<DonorAdapterClass>()
                .setLayout(R.layout.donor_list)
                .setQuery(query,DonorAdapterClass.class)
                .build();

        adapter = new FirebaseListAdapter(options) {

            @Override
            protected void populateView(@NonNull View v, @NonNull Object model, int position) {
                DonorAdapterClass donors = (DonorAdapterClass) model;

                if(donors.getIsDonor().toString().equals("yes")){

                    fullName = v.findViewById(R.id.fullName_list);
                    bloodGroup = v.findViewById(R.id.bloodGroup_list);
                    gender = v.findViewById(R.id.gender_lis);
                    address = v.findViewById(R.id.address_list);
                    age = v.findViewById(R.id.age_list);



                    fullName.setText(donors.getFullName().toString());
                    bloodGroup.setText(donors.getBloodGroup().toString());
                    gender.setText(donors.getGender().toString());
                    address.setText(donors.getAddress().toString());
                    age.setText(donors.getAge().toString());

                }

            }
        };

        listView.setAdapter(adapter);

    }
}

все запросы и адаптеры firebase задаются в методе setQuery () ... когда он вызывается из onCreateView (), он работает ... но когда он вызывается из регистра переключателя в onOptionsItemSelected itничего не показывает и предыдущий список также скрывает

Заранее спасибо:)

1 Ответ

0 голосов
/ 23 ноября 2018

Это мой первый ответ в веках , поэтому, пожалуйста, потерпите меня.Это не ответ, а просто указатель на путь к решению.

Установить точку останова в следующих точках

  • onOptionsItemSelected
  • case R.id.a_pos
  • setQuery ()
  • оператор инициализации setQuery :: listView
  • оператор инициализации setQuery :: populateView :: donor

Запустить приложение.Присоедините процесс с помощью отладчика.Теперь, когда вы нажимаете «A +» в опциях, он получает ответ от сервера или выдает исключение?

...