1

I'm using the MainActivity's SearchView here to filter the listview which is showing under tabs but there is an issue of the state of Fragment.

It filters perfectly but when I select first Tab(ADVISORY), then it filters the child of this Tab. And after selecting next Tab(TOP ADVISORY), it filters all listview of the child of this tab but it stops filtering in previous Tab (ADVISORY). And at last I move to the EXPERTVIEW it works only for it not for others.

After lots of debugging I found that it doesn't get destroy when we select another Parent Tab so now I wanna know how I can remove a fragment from its adapter on unselected and reselect on selected again.

MainTabFragment.java

 public class MainTabFragment extends Fragment {

public static int position_child_tab = 0, three_childs_tab_position = 0;
static int count = -1, index = 0;
int position_tab = 0;
Bundle args;
int Current_tab = 0;
public static MyTabLayout myTabLayout;
private static MainTabFragment sMainTabFragment;
public static NonSiwpablePager pager;
private Fragment mFragment;
SharedPreferences pref;
private static final int NUM_ITEMS = 2;
List<Integer> TABLE;
public MainTabFragment() {
    // Required empty public constructor
}

public static MainTabFragment getInstance() {
    return sMainTabFragment;
}

/**
 * Use this factory method to create a new instance of
 * this fragment using the provided parameters.
 *
 * @param param1 Parameter 1.
 * @param param2 Parameter 2.
 * @return A new instance of fragment MainTabFragment.
 */
// TODO: Rename and change types and number of parameters
public static MainTabFragment newInstance(String param1, String param2) {

    return new MainTabFragment();
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    args = getArguments();
    if (args != null && args.containsKey("pos_next"))
        position_tab = args.getInt("pos_next");
    if (args != null && args.containsKey("pos_end"))
        position_child_tab = args.getInt("pos_end");
    if (position_child_tab != 3) {
        three_childs_tab_position = position_child_tab;
    } else {
        three_childs_tab_position = 0;
    }
    args = new Bundle();
    args.putInt("pos_end", position_child_tab);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.main_tab_fragment, container, false);
    myTabLayout = (MyTabLayout) view.findViewById(R.id.mainTabLayout);
    pager = (NonSiwpablePager) view.findViewById(R.id.pager);

    final ViewPagerAdapter mAdapter = getViewPagerAdapter();
    pager.setAdapter(mAdapter);
    myTabLayout.setupWithViewPager(pager);
    for (int i = 0; i < mAdapter.getCount(); i++) {
        View customView = mAdapter.getCustomeView(getActivity(), i);
        myTabLayout.getTabAt(i).setCustomView(customView);
    }
    pager.setCurrentItem(position_tab);
    pager.setOffscreenPageLimit(NUM_ITEMS-1);
    changeTab();

    final Fragment fragment = getFragmentManager().findFragmentByTag("TOP");
    if (fragment != null) {
        pager.setCurrentItem(position_tab);
    }
    index = pager.getCurrentItem();
    pref = getActivity().getPreferences(0);
    SharedPreferences.Editor edt = pref.edit();
    edt.putInt("facebook_id", pager.getCurrentItem());
    edt.commit();
    //    ViewPagerAdapter adapter = ((ViewPagerAdapter)pager.getAdapter());
    final Fragment fragment22 = mAdapter.getRegisteredFragment(pager.getCurrentItem());

    pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageSelected(int arg0) {
            // TODO Auto-generated method stub
            pref = getActivity().getPreferences(0);
            SharedPreferences.Editor edt = pref.edit();
            edt.putInt("facebook_id", pager.getCurrentItem());
            edt.commit();
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub

            //Log.e("Fragment", fragment + "" +pager.getCurrentItem() + fragment22);
        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
            // TODO Auto-generated method stub
            //    Log.e("Fragment", fragment + "" +pager.getCurrentItem() + fragment22);
        }
    });


    myTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            pager.setCurrentItem(tab.getPosition());
            //Log.e("Fragment", fragment + "" +pager.getCurrentItem() + fragment22);
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
           // mAdapter.destroyAllItem();
            //    Log.e("Fragment", fragment + "" +pager.getCurrentItem() + fragment22);
        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {
            //    Log.e("Fragment", fragment + "" +pager.getCurrentItem() + fragment22);
        }

    });
    return view;
}


public void changeTab() {
    Current_tab = pager.getCurrentItem();
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    myTabLayout.getTabAt(position_tab).getCustomView().setSelected(true);
}

public void setCurrentItem(int item) {
    pager.setCurrentItem(item);
}

private ViewPagerAdapter getViewPagerAdapter() {
    ViewPagerAdapter mAdapter = new ViewPagerAdapter(getChildFragmentManager());
    String title_arr[] = {"ADVISORY", "TOP ADVISORS", "EXPERT VIEW"};
    for (int i = 0; i < title_arr.length; i++) {
        Map<String, Object> map = new Hashtable<>();
        map.put(ViewPagerAdapter.KEY_TITLE, title_arr[i]);
        if (i == 0) {
            map.put(ViewPagerAdapter.KEY_FRAGMENT, AdvisoryPagerFragment.newInstance());
            AdvisoryPagerFragment.newInstance().setTargetFragment(this, getTargetRequestCode());
        } else if (i == 1) {
            map.put(ViewPagerAdapter.KEY_FRAGMENT, TopAdvisoryPagerFragment.newInstance());
            TopAdvisoryPagerFragment.newInstance().setTargetFragment(this, getTargetRequestCode());
        } else if (i == 2) {
            map.put(ViewPagerAdapter.KEY_FRAGMENT, ExperViewPagerFragment.newInstance());
            ExperViewPagerFragment.newInstance().setTargetFragment(this, getTargetRequestCode());
        }
        mAdapter.addFragmentAndTitle(map);

    }
    return mAdapter;
}

public static class ViewPagerAdapter extends FragmentStatePagerAdapter {
    private static final String KEY_TITLE = "fragment_title";
    private static final String KEY_FRAGMENT = "fragment";
    boolean abc = false;
    private int[] drawables = new int[]{R.drawable.advisory_selector, R.drawable.top_advisors_selector, R.drawable.expertview_selector};
    private List<Map<String, Object>> maps = new ArrayList<>();
    private Fragment mCurrentFragment;
    SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>();

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

    public View getCustomeView(Context context, int pos) {
        View mView = LayoutInflater.from(context).inflate(R.layout.custom_tab_view, null);
        TextView mTextView = (TextView) mView.findViewById(R.id.textView);
        mTextView.setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/ufonts.com_cambria.ttf"));
        ImageView mImageView = (ImageView) mView.findViewById(R.id.imageView2);
        mImageView.setTag(pos);

        /*if(count >0)
        {
            Toast.makeText(context,"Count Is "+count,Toast.LENGTH_SHORT).show();
            mImageView =  (ImageView) mImageView.getTag(0);
            mImageView.setSelected(false);
        }
        */
        mImageView.setImageResource(drawables[pos]);
        mTextView.setText(getPageTitle(pos));
        return mView;
    }

    public void addFragmentAndTitle(Map<String, Object> map) {
        maps.add(map);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return (CharSequence) maps.get(position).get(KEY_TITLE);
    }

    @Override
    public Fragment getItem(int position) {
        Log.e("Fragmentss", (Fragment) maps.get(position).get(KEY_FRAGMENT) + "");
        return (Fragment) maps.get(position).get(KEY_FRAGMENT);
    }

    public Fragment getCurrentFragment() {
        return mCurrentFragment;
    }

    @Override
    public void setPrimaryItem(ViewGroup container, int position, Object object) {
        if (mCurrentFragment != object) {
            mCurrentFragment = (Fragment) object;
        }
        super.setPrimaryItem(container, position, object);
    }

    @Override
    public int getCount() {
        return maps.size();
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        Fragment fragment = (Fragment) super.instantiateItem(container, position);
        registeredFragments.put(position, fragment);
        return fragment;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        registeredFragments.remove(position);
        super.destroyItem(container, position, object);

    }

    public Fragment getRegisteredFragment(int position) {
        return registeredFragments.get(position);
    }

}


}
Anshul Tyagi
  • 2,076
  • 4
  • 34
  • 65

0 Answers0