选项卡式片段仅显示第一个片段

时间:2016-03-22 00:56:32

标签: android android-fragments tabs android-viewpager

我有一个标签片段,由下面的课程概述。

有两个选项卡,其中包含信息列表,朋友和群组。我遇到的问题是,“群组”列表首先在“好友”标签中呈现,然后消失,允许“好友”列表在“好友”标签中呈现。但是,在滑动到“组”选项卡时,组列表永远不会呈现。

如何解决这个问题?

选项卡式活动:

public class InvitingFriendsGroupsToEvents extends AppCompatActivity {

    /**
     * The {@link android.support.v4.view.PagerAdapter} that will provide
     * fragments for each of the sections. We use a
     * {@link FragmentPagerAdapter} derivative, which will keep every
     * loaded fragment in memory. If this becomes too memory intensive, it
     * may be best to switch to a
     * {@link android.support.v4.app.FragmentStatePagerAdapter}.
     */
    private SectionsPagerAdapter mSectionsPagerAdapter;

    /**
     * The {@link ViewPager} that will host the section contents.
     */
    private ViewPager mViewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_inviting_friends_groups_to_events);

        // Create the adapter that will return a fragment for each of the three
        // primary sections of the activity.
        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

        // Set up the ViewPager with the sections adapter.
        mViewPager = (ViewPager) findViewById(R.id.container);
        mViewPager.setAdapter(mSectionsPagerAdapter);

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(mViewPager);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_inviting_friends_groups_to_events, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {
        /**
         * The fragment argument representing the section number for this
         * fragment.
         */
        private static final String ARG_SECTION_NUMBER = "section_number";

        public PlaceholderFragment() {
        }

        /**
         * Returns a new instance of this fragment for the given section
         * number.
         */
        public static PlaceholderFragment newInstance(int sectionNumber) {
            PlaceholderFragment fragment = new PlaceholderFragment();
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            fragment.setArguments(args);
            return fragment;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_inviting_friends_groups_to_events, container, false);
            TextView textView = (TextView) rootView.findViewById(R.id.section_label);
            textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER)));
            return rootView;
        }
    }

    /**
     * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
     * one of the sections/tabs/pages.
     */
    public class SectionsPagerAdapter extends FragmentPagerAdapter {

        public SectionsPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public int getCount() {
            return 2;
        }

        @Override
        public Fragment getItem(int position) {

            //  Need to build
            //  Order/first appearing will be specific to time of day, ie. if in morning, then breakfast/brunch, if midday then lunch, late then dinner
            switch (position) {
                case 0:
                    return new InviteFriendsToEventsFragment();
                case 1:
                    return new InviteGroupsToEventsFragment();
            }

            return null;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            switch (position) {
                case 0:
                    return "Friends";
                case 1:
                    return "Groups";
            }
            return null;
        }
    }
}

朋友标签:

public class InviteFriendsToEventsFragment extends Fragment {
    // ie. once a fiend is invited, it will show their group on the second tab, the name, who invite them

    MyCustomAdapter dataAdapter = null;
    SaveSharedPreference preference = new SaveSharedPreference();

    final Firebase myFeastFirebase = new Firebase(Constants.getFirebaseUrl());
    Firebase presentEventMembers;
    Firebase myFriends;
    Firebase sentFriendEventInvites; // this will be the grayed out standing invitation

    Firebase eventMemberInviteNeedSync;

    ValueEventListener getFriendsListener;
    ValueEventListener getEventMembersListener;
    ValueEventListener getAlreadyInvitedFriendsListener;

    String eventID;
    String eventName;

    ArrayList<Member> mEventMembers = new ArrayList<>();
    ArrayList<Member> mFriends = new ArrayList<>();
    ArrayList<Member> mAlreadyInvited = new ArrayList<>();
    ArrayList<FriendInvite> mFriendsFinalInviteStatuses = new ArrayList<>();

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

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        View view = inflater.inflate(R.layout.invite_friends_to_events, container, false);

        Bundle extras = getActivity().getIntent().getExtras();
        eventID = extras.getString("eventID");
        eventName = extras.getString("eventName");
        Log.v("InvitingFriendsToEvents", "Event ID: " + eventID);
        Log.v("InvitingFriendsToEvents", "Event Name" + eventName);

        //Generate list View from ArrayList
        // Get present group members
        presentEventMembers = myFeastFirebase.child("eventMembers").child(eventID);
        myFriends = myFeastFirebase.child("friends").child(preference.getUserSyncID(getContext()));
        sentFriendEventInvites = myFeastFirebase.child("userEventMemberInviteSent").child(preference.getUserSyncID(getContext())).child(eventID);

        eventMemberInviteNeedSync = myFeastFirebase.child("eventMemberInviteNeedSync");

        getAlreadyInvitedFriendsListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot inviteSnapshot : dataSnapshot.getChildren()) {

                    Member invitedFriend = new Member();
                    invitedFriend.setUserUID(inviteSnapshot.getKey());
                    invitedFriend.setUserName(inviteSnapshot.getValue().toString());

                    mAlreadyInvited.add(invitedFriend);

                    Log.v("InvitingFriendsToEvents", "Invite Sent userName is: " + inviteSnapshot.getValue().toString());
                    Log.v("InvitingFriendsToEvents", "Invite Sent ID is: " + inviteSnapshot.getKey().toString());

                }

                // Here will be the operation to get the proper setting for
                // First: remove from friends, those already in the group:
                mFriends.removeAll(mEventMembers);

                // Then add to the invite group
                for (Member friend : mFriends) {
                    FriendInvite groupMemberInvite = new FriendInvite();
                    groupMemberInvite.setUserName(friend.getUserName());
                    groupMemberInvite.setUserUID(friend.getUserUID());

                    if (mAlreadyInvited.contains(friend)) {
                        groupMemberInvite.setInvitedAlready(true);
                    }
                    mFriendsFinalInviteStatuses.add(groupMemberInvite);

                    Log.v("InvitingFriendsToEvents", "Final List UserName is: " + groupMemberInvite.getUserName());
                    Log.v("InvitingFriendsToEvents", "Final List UserID is: " + groupMemberInvite.getUserUID());
                    Log.v("InvitingFriendsToEvents", "Final List InviteStatus is: " + groupMemberInvite.isInvitedAlready());
                }
                //dataAdapter.notifyDataSetChanged();

                //create an ArrayAdaptar from the String Array
                dataAdapter = new MyCustomAdapter(getActivity(),
                        R.layout.country_info, mFriendsFinalInviteStatuses);
                ListView listView = (ListView) getActivity().findViewById(R.id.listView1);
                // Assign adapter to ListView
                listView.setAdapter(dataAdapter);

                dataAdapter.notifyDataSetChanged();
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {

            }
        };

        getFriendsListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot friendSnapshot : dataSnapshot.getChildren()) {

                    if (!friendSnapshot.getKey().equals(preference.getUserSyncID(getContext()))) {
                        Member friend = new Member();
                        friend.setUserUID(friendSnapshot.getKey());
                        friend.setUserName(friendSnapshot.child("userName").getValue().toString());

                        mFriends.add(friend);

                        Log.v("InvitingFriendsToEvents", "Friend userName is: " + friendSnapshot.child("userName").getValue().toString());
                        Log.v("InvitingFriendsToEvents", "Friend user ID is: " + friendSnapshot.getKey().toString());
                    }
                }

                // after getting friends
                sentFriendEventInvites.addListenerForSingleValueEvent(getAlreadyInvitedFriendsListener);
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {
                Log.v("InvitingFriendsToEvents", "Firebase Error: " + firebaseError.toString());

            }
        };

        getEventMembersListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot groupMemberSnapshot : dataSnapshot.getChildren()) {

                    if (!groupMemberSnapshot.getKey().equals(preference.getUserSyncID(getContext()))) {
                        Member groupMember = new Member();
                        groupMember.setUserUID(groupMemberSnapshot.getKey());
                        groupMember.setUserName(groupMemberSnapshot.getValue().toString());

                        mEventMembers.add(groupMember);

                        Log.v("InvitingFriendsToEvents", "Group member userName is: " + groupMemberSnapshot.getValue().toString());
                        Log.v("InvitingFriendsToEvents", "Group member user ID is: " + groupMemberSnapshot.getKey().toString());
                    }
                }

//                 upon completion of getting groups
                myFriends.addListenerForSingleValueEvent(getFriendsListener);

            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {
                Log.v("InvitingFriendsToEvents", "Firebase Error: " + firebaseError.toString());

            }
        };
        presentEventMembers.addListenerForSingleValueEvent(getEventMembersListener);

        //confirmFriendInvites();

        return view;
    }

    private class MyCustomAdapter extends ArrayAdapter<FriendInvite> {

        private ArrayList<FriendInvite> groupMemberInviteList;

        public MyCustomAdapter(Context context, int textViewResourceId,
                               ArrayList<FriendInvite> groupMemberInviteList) {
            super(context, textViewResourceId, groupMemberInviteList);
            this.groupMemberInviteList = new ArrayList<>();
            this.groupMemberInviteList.addAll(groupMemberInviteList);
        }

        private class ViewHolder {
            TextView inviteSent;
            CheckBox checkBox;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            ViewHolder holder = null;
            Log.v("ConvertView", String.valueOf(position));

            if (convertView == null) {
                LayoutInflater vi = (LayoutInflater) getActivity().getSystemService(
                        Context.LAYOUT_INFLATER_SERVICE);
                convertView = vi.inflate(R.layout.country_info, null);

                holder = new ViewHolder();
                holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBox1); // here it is
                holder.inviteSent = (TextView) convertView.findViewById(R.id.invite_already_sent);

                convertView.setTag(holder);

                holder.checkBox.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        CheckBox cb = (CheckBox) v;
                        FriendInvite groupMemberInivited = (FriendInvite) cb.getTag();
                        Toast.makeText(getActivity(),
                                "Clicked on Checkbox: " + cb.getText() +
                                        " is " + cb.isChecked(),
                                Toast.LENGTH_LONG).show();
                        groupMemberInivited.setSelected(cb.isChecked());
                    }
                });
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            FriendInvite groupMemberInvite = groupMemberInviteList.get(position);

            holder.checkBox.setText(groupMemberInvite.getUserName());
            holder.checkBox.setChecked(groupMemberInvite.isSelected());
            holder.checkBox.setTag(groupMemberInvite);

            // Check if already invited, if so, should remove
            if (groupMemberInvite.isInvitedAlready() == true) {

                holder.checkBox.setTextColor(Color.GRAY);
                holder.checkBox.setClickable(false);

                holder.inviteSent.setText("Invite Already Sent");
            } else {
                holder.inviteSent.setText("");
            }
            return convertView;
        }

    }

}

组标签:

public class InviteGroupsToEventsFragment extends Fragment {     //即。一旦邀请了一个恶魔,它将在第二个标签上显示他们的小组,名字,谁邀请他们

GroupInviteCustomAdapter dataAdapter = null;
SaveSharedPreference preference = new SaveSharedPreference();

final Firebase myFeastFirebase = new Firebase(Constants.getFirebaseUrl());
Firebase presentEventMembers;
Firebase sentFriendEventInvites; // this will be the grayed out standing invitation

Firebase mGroups;
Firebase mGroupMembers;

Firebase eventMemberInviteNeedSync;

ValueEventListener getFriendsListener;
ValueEventListener getEventMembersListener;
ValueEventListener getAlreadyInvitedFriendsListener;
ValueEventListener getUsersGroups;

String eventID;
String eventName;

ArrayList<Member> mEventMembers = new ArrayList<>();
ArrayList<Member> mFriends = new ArrayList<>();
ArrayList<Member> mAlreadyInvited = new ArrayList<>();
ArrayList<FriendInvite> mFriendsFinalInviteStatuses = new ArrayList<>();

ArrayList<GroupInvite> mUsersGroups = new ArrayList<>();

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

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    View view = inflater.inflate(R.layout.invite_groups_to_events, container, false);

    Bundle extras = getActivity().getIntent().getExtras();
    eventID = extras.getString("eventID");
    eventName = extras.getString("eventName");
    Log.v("InvitingFriendsToEvents", "Event ID: " + eventID);
    Log.v("InvitingFriendsToEvents", "Event Name" + eventName);

    //Generate list View from ArrayList
    // Get present group members
    presentEventMembers = myFeastFirebase.child("eventMembers").child(eventID);
    mGroupMembers = myFeastFirebase.child("groupMembers"); // will append: .child("")
    mGroups = myFeastFirebase.child("usersGroups").child(preference.getUserSyncID(getContext()));
    sentFriendEventInvites = myFeastFirebase.child("userEventMemberInviteSent").child(preference.getUserSyncID(getContext())).child(eventID);

    eventMemberInviteNeedSync = myFeastFirebase.child("eventMemberInviteNeedSync");

    getUsersGroups = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot inviteSnapshot : dataSnapshot.getChildren()) {

                GroupInvite invitedGroup = new GroupInvite();
                invitedGroup.setGroupSyncID(inviteSnapshot.getKey());
                invitedGroup.setGroupName(inviteSnapshot.getValue().toString());

                mUsersGroups.add(invitedGroup);

                Log.v("InvitingFriendsToEvents", "Invite Sent userName is: " + inviteSnapshot.getValue().toString());
                Log.v("InvitingFriendsToEvents", "Invite Sent ID is: " + inviteSnapshot.getKey().toString());

            }

            dataAdapter = new GroupInviteCustomAdapter(getActivity(),
                    R.layout.event_invites_groups, mUsersGroups);
            ListView listView = (ListView) getActivity().findViewById(R.id.listView1);
            // Assign adapter to ListView
            listView.setAdapter(dataAdapter);

            dataAdapter.notifyDataSetChanged();

        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    };


    mGroups.addListenerForSingleValueEvent(getUsersGroups);


    return view;
}

private class GroupInviteCustomAdapter extends ArrayAdapter<GroupInvite> {

    private ArrayList<GroupInvite> groupInviteList;

    public GroupInviteCustomAdapter(Context context, int textViewResourceId,
                                    ArrayList<GroupInvite> groupInviteList) {
        super(context, textViewResourceId, groupInviteList);
        this.groupInviteList = new ArrayList<>();
        this.groupInviteList.addAll(groupInviteList);
    }

    private class ViewHolder {
        TextView inviteSent;
        CheckBox checkBox;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder = null;
        Log.v("ConvertView", String.valueOf(position));

        if (convertView == null) {
            LayoutInflater vi = (LayoutInflater) getActivity().getSystemService(
                    Context.LAYOUT_INFLATER_SERVICE);
            convertView = vi.inflate(R.layout.event_invites_groups, null);

            holder = new ViewHolder();
            holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBox1); // here it is
            holder.inviteSent = (TextView) convertView.findViewById(R.id.invite_already_sent);

            convertView.setTag(holder);

            holder.checkBox.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    CheckBox cb = (CheckBox) v;
                    GroupInvite groupInvited = (GroupInvite) cb.getTag();
                    Toast.makeText(getActivity(),
                            "Clicked on Checkbox: " + cb.getText() +
                                    " is " + cb.isChecked(),
                            Toast.LENGTH_LONG).show();
                    groupInvited.setSelected(cb.isChecked());
                }
            });
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        GroupInvite groupInvite = groupInviteList.get(position);

        holder.checkBox.setText(groupInvite.getName());
        holder.checkBox.setChecked(groupInvite.isSelected());
        holder.checkBox.setTag(groupInvite);

        // Check if already invited, if so, should remove
        if (groupInvite.isInvitedAlready() == true) {

            holder.checkBox.setTextColor(Color.GRAY);
            holder.checkBox.setClickable(false);

            holder.inviteSent.setText("Invite Already Sent");
        } else {
            holder.inviteSent.setText("");
        }
        return convertView;
    }

}

}

1 个答案:

答案 0 :(得分:0)

将以下代码块移到getUsersGroups = new ValueEventListener()

之外
         dataAdapter = new GroupInviteCustomAdapter(getActivity(),
                R.layout.event_invites_groups, mUsersGroups);
        ListView listView = (ListView) getActivity().findViewById(R.id.listView1);
        // Assign adapter to ListView
        listView.setAdapter(dataAdapter);

        dataAdapter.notifyDataSetChanged();

ValueEventListener()仅执行覆盖方法。我的猜测是上面的代码永远不会运行。请尝试并告诉我它是否有效。如果它不会进一步调试。