如何使用RecyclerView解决片段内的TabLayout,其中包含一个片段使用newInstance()创建的四个制表符

时间:2016-07-22 12:02:36

标签: fragment android-recyclerview multiple-instances android-tablayout

我实现了一个包含NavigationView的Activity,其中包含多个片段。 NavigationView的第一个片段包含RecyclerViewTabLayout,因此我可以在不同的列表之间滑动。因为我总是拥有不同值的相同列表(UI),所以我决定只使用newInstance()实现一个片段。

我现在的问题是,当我从Tab1跳转到Tab2或者我更改列表项并返回列表时,列表无法正确更新。有人能帮助我吗?我无法弄清楚......

swipe from Tab1 to Tab2 这是我的片段,其中包含RecyclerView



public class HinweiseFragment extends Fragment {

    private static final String TAG = "HinweiseFragment";
    private TabLayout mTabLayout;
    private ViewPager mViewPager;
    private HinweiseTabAdapter adapter;

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

        ((MainActivity) getActivity()).getSupportActionBar().setTitle("Hinweise");

        ((MainActivity) getActivity()).showFloatingActionButton();

        View rootView = inflater.inflate(R.layout.fragment_hinweise, null);

        mTabLayout = (TabLayout) rootView.findViewById(R.id.tablayout_hinweise);
        mTabLayout.addTab(mTabLayout.newTab().setText("BESAMUNG"));
        mTabLayout.addTab(mTabLayout.newTab().setText("NICHT BESAMEN"));
        mTabLayout.addTab(mTabLayout.newTab().setText("VERDACHT"));
        mTabLayout.addTab(mTabLayout.newTab().setText("ALLE"));
        mTabLayout.setTabGravity(mTabLayout.GRAVITY_FILL);

        mViewPager = (ViewPager) rootView.findViewById(R.id.viewpager_hinweise);
        adapter = new HinweiseTabAdapter(getChildFragmentManager(), mTabLayout.getTabCount(), getContext());

        mViewPager.setAdapter(adapter);
        mViewPager.setOffscreenPageLimit(3);


        mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout));
        mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {

                mViewPager.setCurrentItem(tab.getPosition(), true);
                adapter.refreshFragment(tab.getPosition());

            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {
            }
        });

        return rootView;

    }
}




这是我的TabAdapter:



public class HinweiseTabAdapter extends FragmentPagerAdapter {
    HinweiseListFragment tab_besamung, tab_nicht, tab_verdacht, tab_alle;
    String[] tabHostTitle = {"BESAMUNG", "NICHT BESAMEN", "VERDACHT", "ALLE"};
    int mNumOfTabs;
    private final Context mContext;

    public HinweiseTabAdapter(FragmentManager fm, int NumOfTabs, Context context) {
        super(fm);
        this.mNumOfTabs = NumOfTabs;
        this.mContext = context;
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                tab_besamung = HinweiseListFragment.newInstance(0, "BESAMUNG");
                return tab_besamung;
            case 1:
                tab_nicht = HinweiseListFragment.newInstance(1, "NICHT BESAMEN");
                return tab_nicht;
            case 2:
                tab_verdacht = HinweiseListFragment.newInstance(2, "VERDACHT");
                return tab_verdacht;
            case 3:
                tab_alle = HinweiseListFragment.newInstance(3, "ALLE");
                return tab_alle;
            default:
                return null;
        }
    }

    public void refreshFragment(int position) {
        switch (position) {
            case 0:
                tab_besamung.update();
                break;
            case 1:
                tab_nicht.update();
                break;
            case 2:
                tab_verdacht.update();
                break;
            case 3:
                tab_alle.update();
                break;
        }
    }

    @Override
    public int getItemPosition(Object object) {
        int position = getItemPosition(object);

        if (position >= 0) {
            return position;
        } else {
            return POSITION_NONE;
        }
    }

    @Override
    public int getCount() {
        return mNumOfTabs;

    }

    @Override
    public CharSequence getPageTitle(int position) {
        return tabHostTitle[position];
    }
}




这是我的片段,其中包含List:



    public static HinweiseListFragment newInstance(int page, String title) {
        HinweiseListFragment fragment = new HinweiseListFragment();
        Bundle args = new Bundle();
        args.putInt(PASSED_PAGE, page);
        args.putString(PASSED_TITLE, title);
        fragment.setArguments(args);
        return fragment;
    }


    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Bundle args = getArguments();
        if (args != null) {
            tabCount = args.getInt(PASSED_PAGE);
            tabName = args.getString(PASSED_TITLE);
        }
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_hinweise_list, container, false);

        list_hinweise = new ArrayList<>();

        mRecyclerView = (RecyclerView) rootView.findViewById(R.id.rv_listHinweise);
        mSwipeRefreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.swipeHinweise);

        mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                mSwipeRefreshLayout.post(new Runnable() {
                    @Override
                    public void run() {
                        mSwipeRefreshLayout.setRefreshing(true);
                        refreshContent();
                    }
                });

            }
        });

        db = new DataBase(getActivity());
        userHitKdr();

        List<String> tab_ = db.getAll("SELECT * from tab_info where user_tab ='" + userdb + "' ");
        if (tab_.size() != 2) {
            db.updateSql("delete from tab_info where user_tab='" + userdb + "' ");
            db.updateSql("insert into tab_info (activity_tab,tab_select,user_tab) values ('home','0','" + userdb + "'),('aufgabe','0','" + userdb + "'); ");
        } else {
        }

        mRecyclerView.setHasFixedSize(true);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        mHinweiseAdapter = new HinweiseAdapter(getActivity(), getHinweise());
        mRecyclerView.setAdapter(mHinweiseAdapter);

        ItemClickSupport.addTo(mRecyclerView).setOnItemClickListener(new ItemClickSupport.OnItemClickListener() {
            @Override
            public void onItemClicked(RecyclerView recyclerView, int position, View v) {
                Intent detailView = new Intent(getActivity(), HinweiseDetail.class);

                String[] tierarr = new String[tier_id.size()];
                tier_id.toArray(tierarr);
                String[] hinarr = new String[hin_id.size()];
                hin_id.toArray(hinarr);
                detailView.putExtra("detailart", "ovalert");
                detailView.putExtra("idTier", tier_id.get(position));
                detailView.putExtra("idDetail", hin_id.get(position));
                int ipos = position;
                Integer integerConverter = new Integer(ipos);
                String s = integerConverter.toString();
                detailView.putExtra("pos", s);
                detailView.putExtra("arrIdTier", tierarr);
                detailView.putExtra("arrIdHin", hinarr);

                detailView.putExtra("userDetail", userdb);
                detailView.putExtra("hitDetail", hitdb);
                startActivity(detailView);
            }
        });

        return rootView;
    }


    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);

        if (isVisibleToUser) {
            if(list_hinweise != null) {
                update();
            }
        }
    }

    public String checkTab(int tab) {
        tabCount = tab;
        //tabName = name;

        if (tabCount == 0) {
            auswahl = " animalReproductionIndication.off='0' and (animalReproductionIndication.indicationCertainty ='IN'  or animalReproductionIndication.indicationCertainty ='ID' or animalReproductionIndication.indicationCertainty ='' ) and ";
            db.updateSql("update tab_info set tab_select='" + tabCount + "' where activity_tab='home' and  user_tab='" + userdb + "' ");

            if (list_hinweise != null) {
                list_hinweise.clear();
                if (mHinweiseAdapter != null) {
                    mHinweiseAdapter.notifyDataSetChanged();
                }
            }
        }

        if (tabCount == 1) {
            auswahl = " animalReproductionIndication.off='0' and  (animalReproductionIndication.indicationCertainty ='NI'  or animalReproductionIndication.indicationCertainty ='HO') and ";
            db.updateSql("update tab_info set tab_select='" + tabCount + "' where activity_tab='home' and  user_tab='" + userdb + "' ");

            if (list_hinweise != null) {
                list_hinweise.clear();
                if (mHinweiseAdapter != null) {
                    mHinweiseAdapter.notifyDataSetChanged();
                }
            }
        }

        if (tabCount == 2) {
            auswahl = " animalReproductionIndication.off='0' and  animalReproductionIndication.indicationCertainty ='SU' and ";
            db.updateSql("update tab_info set tab_select='" + tabCount + "' where activity_tab='home' and  user_tab='" + userdb + "' ");

            if (list_hinweise != null) {
                list_hinweise.clear();
                if (mHinweiseAdapter != null) {
                    mHinweiseAdapter.notifyDataSetChanged();
                }
            }
        }
        if (tabCount == 3) {
            auswahl = " animalReproductionIndication.off='0' and  (animalReproductionIndication.indicationCertainty ='IN' or animalReproductionIndication.indicationCertainty ='NI' or animalReproductionIndication.indicationCertainty ='SU' or animalReproductionIndication.indicationCertainty ='ID'  or animalReproductionIndication.indicationCertainty ='HO') and ";
            db.updateSql("update tab_info set tab_select='" + tabCount + "' where activity_tab='home' and  user_tab='" + userdb + "' ");

            if (list_hinweise != null) {
                list_hinweise.clear();
                if (mHinweiseAdapter != null) {
                    mHinweiseAdapter.notifyDataSetChanged();
                }
            }
        }

        return auswahl;
    }

    public void update(){
        tabCount = getArguments() != null ? getArguments().getInt(PASSED_PAGE) : 0;
        tabName = getArguments() != null ? getArguments().getString(PASSED_TITLE) : "BESAMUNG";
        list_hinweise.clear();
        mHinweiseAdapter = new HinweiseAdapter(getActivity(), getHinweise());
        mRecyclerView.setAdapter(mHinweiseAdapter);
    }

    public void refreshContent() {
        importIndication();

        tabCount = getArguments() != null ? getArguments().getInt(PASSED_PAGE) : 0;
        tabName = getArguments() != null ? getArguments().getString(PASSED_TITLE) : "BESAMUNG";
        list_hinweise.clear();
        mHinweiseAdapter = new HinweiseAdapter(getActivity(), getHinweise());
        mRecyclerView.setAdapter(mHinweiseAdapter);
        // stopping swipe refresh
        mSwipeRefreshLayout.setRefreshing(false);
    }


    private List<ListHinweise> getHinweise() {
        checkTab(tabCount);

        tm = new DateTime();
        rg = new DateRegex();
        tt = new DateTime();

        try {
            db.checkAndCopyDatabase();
            db.openDatabase();
        } catch (SQLiteException e) {
            e.printStackTrace();
        }

        String sqlSortName = "select nameCode from sortieren where art='1' and (disable='0' or disable='1') and user='" + userdb + "'  group by nameCode ";
        String sqlSortDisable = "select disable from sortieren where art='1' and (disable='0' or disable='1') and user='" + userdb + "'  group by nameCode ";

        List<String> listSortName = db.getAll(sqlSortName);
        List<String> listSortDisable = db.getAll(sqlSortDisable);

        String sortSql = "";
        for (int s1 = 0; s1 < listSortName.size(); s1++) {
            System.out.println("Sort: " + listSortDisable.get(s1));
            if (s1 == listSortName.size() - 1) {
                String orderby = " desc ";
                if (listSortDisable.get(s1).equals("0"))
                    orderby = " asc ";
                if (listSortName.get(s1).equals("indicationDateTime"))
                    sortSql = sortSql + " animalReproductionIndication." + listSortName.get(s1) + " " + orderby;
                else if (listSortName.get(s1).equals("farmersAnimalNr"))
                    sortSql = sortSql + " cast(OVALERTAPP." + listSortName.get(s1) + " as integer) " + orderby;
                else
                    sortSql = sortSql + " OVALERTAPP." + listSortName.get(s1) + " " + orderby;
            } else {
                String orderby = " desc ,";
                if (listSortDisable.get(s1).equals("0"))
                    orderby = " asc ,";
                if (listSortName.get(s1).equals("indicationDateTime"))
                    sortSql = sortSql + " animalReproductionIndication." + listSortName.get(s1) + " " + orderby;
                else if (listSortName.get(s1).equals("farmersAnimalNr"))
                    sortSql = sortSql + " cast(OVALERTAPP." + listSortName.get(s1) + " as integer) " + orderby;
                else
                    sortSql = sortSql + " OVALERTAPP." + listSortName.get(s1) + " " + orderby;
            }
        }
        String sxc = sortSql;
        sxc = sxc.trim();
        if (!sxc.equals(""))
            sortSql = " order by " + sortSql;

        System.out.println("Sort: " + sortSql);

        try {
            sql = " FROM OVALERTAPP, animalReproductionIndication WHERE " + sql_user_hit + " OVALERTAPP.AnimalNumber= animalReproductionIndication.AnimalNumber and " + auswahl + "1 " + sortSql;
            String prio = db.getSelect("select nameCode from primaeridentifikation where  user='" + userdb + "' and art='1' and disable='1'  ");

            List<String> einstellung_name = db.getAll("SELECT name from einstellungen where user ='" + userdb + "' and seite='1' and disable='1' ");
            List<String> einstellung_nameCode = db.getAll("SELECT nameCode from  einstellungen where user ='" + userdb + "' and seite='1' and disable='1' ");
            String xxInhalt = " ";
            for (int xx = 0; xx < einstellung_name.size(); xx++) {
                String namexx = einstellung_name.get(xx);
                for (int yy = 0; yy < namexx_.length; yy++) {
                    namexx = namexx.replace(namexx_[yy], Abkxx_[yy]);
                }
                xxInhalt = xxInhalt + "' " + namexx + ": ' ||  OVALERTAPP." + einstellung_nameCode.get(xx) + "    ||";
            }
            xxInhalt = " || '<br>' || " + xxInhalt + " ''";
            xxInhalt = xxInhalt.replace("OVALERTAPP.participantAnimal", "OVALERTAPP.participantAnimalNr");
            if (einstellung_name.size() < 1) {
                xxInhalt = " ";
            }

            tier_id = db.getAll("SELECT OVALERTAPP.id " + sql);
            hin_id = db.getAll("SELECT animalReproductionIndication.id " + sql);
            hin_besamt = db.getAll("SELECT animalReproductionIndication.indicationCertainty " + sql);
            hin_blaue = db.getAll("select animalReproductionIndication.showType " + sql);
            hin_time = db.getAll("select animalReproductionIndication.indicationDateTime " + sql); //gesehen

            if (prio.equals("")) {
                String sql_ = " SELECT  OVALERTAPP.AnimalNumber ||  ' I.H: ' ||  '--'    || ' T I.B: ' || OVALERTAPP.lastInseminationDate    || ' T LT: '  || OVALERTAPP.calvingDate  || '  T  '||  reproductionStatus " + xxInhalt + " " + sql; // time
                sql_ = sql_.replace("OVALERTAPP.aktivseit", "animalReproductionIndication.indicationDateTime");
                hin_info = db.getAll(sql_);
                // hin_info = db.getAll(" SELECT  OVALERTAPP.AnimalNumber ||  ' I.H: ' ||  '--'    || ' T I.B: ' || OVALERTAPP.lastInseminationDate    || ' T LT: '  || OVALERTAPP.calvingDate  || '  T  '||  reproductionStatus " + xxInhalt + " " + sql); // time

                System.out.println(" SELECT  OVALERTAPP.AnimalNumber ||  ' I.H: ' ||  '--'    || ' T I.B: ' || OVALERTAPP.lastInseminationDate    || ' T LT: '  || OVALERTAPP.calvingDate  || '  T  '||  reproductionStatus " + xxInhalt + " " + sql); // time

            } else {
                //hin_info = db.getAll(" SELECT   OVALERTAPP." + prio + " ||  ' I.H: ' ||  '--'    || ' T I.B: ' || OVALERTAPP.lastInseminationDate    || ' T LT: '  || OVALERTAPP.calvingDate  || '  T  '||  reproductionStatus " + xxInhalt + " " + sql); // time
                String sql_ = " SELECT   OVALERTAPP." + prio + " ||  ' I.H: ' ||  '--'    || ' T I.B: ' || OVALERTAPP.lastInseminationDate    || ' T LT: '  || OVALERTAPP.calvingDate  || '  T  '||  reproductionStatus " + xxInhalt + " " + sql; // time

                sql_ = sql_.replace("OVALERTAPP.aktivseit", "animalReproductionIndication.indicationDateTime");
                hin_info = db.getAll(sql_);
                System.out.println(" SELECT   OVALERTAPP." + prio + " ||  ' I.H: ' ||  '--'    || ' T I.B: ' || OVALERTAPP.lastInseminationDate    || ' T LT: '  || OVALERTAPP.calvingDate  || '  T  '||  reproductionStatus " + xxInhalt + " " + sql); // time


            }

            for (int i = 0; i < hin_besamt.size(); i++) {

                String timehin = db.getSelect("SELECT   indicationDateTime  FROM   animalReproductionIndication  where animalReproductionIndication.id=" + hin_id.get(i));
                String animalhin = db.getSelect("SELECT   animalNumber  FROM   animalReproductionIndication  where animalReproductionIndication.id=" + hin_id.get(i));
                // List<String> maxList=db.getAll("SELECT  indicationDateTime FROM   animalReproductionIndication  where  user='"+userdb+"' and  animalNumber='"+animalhin+"'  and indicationDateTime!='"+timehin+"' and indicationExpirationDateTime !=''   order by indicationDateTime desc  ");
                String timehin_date = timehin + "         ";
                List<String> maxList = db.getAll("SELECT  indicationDateTimeHin FROM   animalReproductionIndicationHinweise  where  userHin='" + userdb + "' and  animalNumberHin='" + animalhin + "'  and indicationDateTimeHin!='" + timehin + "' and (indicationDateTimeHin  not LIKE '" + timehin_date.substring(0, 8) + "%') and indicationDateTimeHin < '" + timehin + "'  order by indicationDateTimeHin desc  ");

                String hin = "";
                if (maxList.size() > 0) {
                    hin = maxList.get(0);
                    System.out.println("hin++++" + hin + " neue: " + timehin);
                }
                //hin=tm.getDayToDay(hin,"yyyyMMddkkmmss");
                hin = tm.getDayMinusDayDate(hin, timehin);
                String line = statusUmbenennen(hin_info.get(i));
                System.out.println("line: " + line);
                String info_ = statusUmbenennen(hin_info.get(i));
                System.out.println("line1: " + line);
                info_ = info_.replace("--", hin);
                System.out.println("line2: " + info_);
                System.out.println(info_);
                String[] anfang = {"I Kalb: ", "I Bes: ", "n Kalb: ", "I Bru: ", " Trocken: "};
                String[] end = {"", "", "", "", ""};


                String[] anfang1 = {"I.H: ", "I.B: ", "LT: "};
                String[] end1 = {"", "", ""};
                try {
                    info_ = lineYMDTag(info_, anfang1, end1);
                    System.out.println("line3: " + info_);

                } catch (ParseException e) {
                    e.printStackTrace();
                }
                String[] anfangx = {"Aktiv seit: "};
                String[] endx = {""};
                try {
                    info_ = lineYMDHMS(info_, anfangx, endx);
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                try {
                    info_ = lineYMD(info_, anfang, end);
                    System.out.println("line4: " + info_);

                } catch (ParseException e) {
                    e.printStackTrace();
                }

                System.out.println("info_: " + info_);
                ListHinweise item = new ListHinweise();
                item.setHinId(tier_id.get(i));
                item.setHinId(hin_id.get(i));
                item.setHinBlaue(hin_blaue.get(i));
                item.setHinInfo(info_);
                item.setHinBesamt(hin_besamt.get(i));
                System.out.println(hin_time.get(i) + "_xmmx_" + tt.getHourDiffStartToNow(hin_time.get(i), "yyyyMMddkkmmss"));
                item.setHinTime(String.valueOf(tt.getHourDiffStartToNow(hin_time.get(i), "yyyyMMddkkmmss")));
                list_hinweise.add(item);

                db.close();
            }

        } catch (SQLiteException e) {
            e.printStackTrace();
        }

        return list_hinweise;
    }
&#13;
&#13;
&#13;

我已经尝试使用onResume或setUserVisibleHint更新列表,但没有成功。我的refreshContent()方法工作正常,但我想自动更新列表而不是手动更新。如果我使用了onResume()方法,则会刷新Items但是我的Tab1包含Tab1和Tab2中的值。

0 个答案:

没有答案