【问题标题】:Tab Automatically redirect to first tab on data change of third tab选项卡在第三个选项卡的数据更改时自动重定向到第一个选项卡
【发布时间】:2018-02-27 04:41:11
【问题描述】:

您好,我在我的

中使用 Tablayout

TAB1 TAB2 TAB3

当我打开应用程序时,默认选择TAB1。所有TABs 都有recyclerview。现在我为所有片段提供了一个FAB 按钮。我正在使用FAB 按钮更改语言。

每当用户更改语言数据时,都会根据语言选择显示。现在的问题是当我在TAB3 并更改语言而不是留在TAB3 时,它转到TAB1

谁能帮我解决这个问题。

public class LibraryFragment extends Fragment  {

    private static final String TAG = LibraryFragment.class.getSimpleName();

    private TabLayout tabLayout;
    private ViewPager viewPager;
    private String catid;
    private FragmentManager fragmentManager;
    private String SELECTED_ACTION;
    private String SELECTED_LANGUAGE,SELECTED_LANGUAGENM,sel_cat;
    private int VID_CODE;
    private FloatingActionButton fab;
    private ArrayList<LanguageModel> langList;

    public LibraryFragment() {
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_library, container, false);

        langList = (ArrayList<LanguageModel>) getArguments().getSerializable("langlist");

        catid = getArguments().getString("frommusic");

        SELECTED_ACTION = getArguments().getString("action");

        SELECTED_LANGUAGE = getArguments().getString("sel_lang");
        SELECTED_LANGUAGENM = getArguments().getString("sel_langnm");
        sel_cat = getArguments().getString("sel_cat");
        System.out.println("in library" + SELECTED_LANGUAGE);

        tabLayout = (TabLayout) view.findViewById(R.id.tabs);
        viewPager = (ViewPager) view.findViewById(R.id.view_pager);

        viewPager.setAdapter(new CustomFragmentPageAdapter(getChildFragmentManager()));
        tabLayout.setupWithViewPager(viewPager);

        fab = (FloatingActionButton) view.findViewById(R.id.fabChat);

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setdailog();
            }
        });

        return view;
    }

    public void setdailog()
    {
        final Dialog  cpDialog = new Dialog(getActivity());
        cpDialog.setTitle("Select Language");
        cpDialog.setContentView(R.layout.alert_list);
        ListView listView = (ListView) cpDialog.findViewById(R.id.listiview_lang);
        AlertListAdapter mAdapter = new AlertListAdapter(langList, getActivity());
        listView.setAdapter(mAdapter);
        listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                SELECTED_LANGUAGE = langList.get(position).getLangid();
                System.out.println("JO JO"+SELECTED_LANGUAGE);

                Intent intent=new Intent(getActivity(),MusicActivity.class);
                intent.putExtra("langlist",langList);
                intent.putExtra("selid",catid);
                intent.putExtra("langid",SELECTED_LANGUAGE);
                intent.putExtra("langname",langList.get(position).getLangname());
                intent.putExtra("selcat",sel_cat);
                startActivity(intent);

                cpDialog.dismiss();
            }
        });
        cpDialog.show();
    }

    public class AlertListAdapter extends BaseAdapter {

        ArrayList<LanguageModel> mData;
        Context mContext;
        LayoutInflater inflater;

        public AlertListAdapter(ArrayList<LanguageModel> data, Context context) {
            mData = data;
            mContext = context;
            inflater = LayoutInflater.from(context);
        }

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

        @Override
        public Object getItem(int arg0) {
            return null;
        }

        @Override
        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                LayoutInflater mInflater = (LayoutInflater) mContext
                        .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
                convertView = mInflater.inflate(R.layout.item_alert_list, null);
            }
            TextView tvTitle = (TextView) convertView.findViewById(R.id.textView_languge);

            tvTitle.setText(mData.get(position).getLangname());

            return convertView;
        }
    }
    public class CustomFragmentPageAdapter extends FragmentPagerAdapter {

        private  final String TAG = CustomFragmentPageAdapter.class.getSimpleName();

        private static final int FRAGMENT_COUNT = 3;

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

        @Override
        public Fragment getItem(int position) {
            switch (position){
                case 0:
                    Fragment f1 = new SongFragment();
                    Bundle args1 = new Bundle();
                    args1.putString("fromlibfrag", catid);
                    args1.putString("action", SELECTED_ACTION);
                    args1.putString("sel_lang", SELECTED_LANGUAGE);
                    args1.putSerializable("langlist",langList);
                    f1.setArguments(args1);
                    return f1;

                case 1:
                    Fragment f2 = new PhotoFragment();
                    Bundle args2 = new Bundle();
                    args2.putString("fromlibfrag", catid);
                    args2.putString("action", SELECTED_ACTION);
                    args2.putString("sel_lang", SELECTED_LANGUAGE);
                    args2.putSerializable("langlist",langList);
                    f2.setArguments(args2);
                    return f2;

                case 2:
                    Fragment f3 = new SmsFragment();
                    Bundle args3 = new Bundle();
                    args3.putString("fromlibfrag", catid);
                    args3.putString("action", SELECTED_ACTION);
                    args3.putString("sel_lang", SELECTED_LANGUAGE);
                    args3.putSerializable("langlist",langList);
                    f3.setArguments(args3);
                    return f3;
            }
            return null;
        }

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

        @Override
        public CharSequence getPageTitle(int position) {
            switch (position){
                case 0:
                    return "Videos";
                case 1:
                    return "Photos";
                case 2:
                    return "SMS";

            }
            return null;
        }
    }
}

【问题讨论】:

  • setdailog() 方法中调用 Intent 后完成您的 MusicActivity 活动。
  • 在您的 setdailog() 方法中只需传递当前片段的对象并在 intent 中传递此对象。 . .现在在您的主要活动中,只需获取带有附加功能的意图并从意图设置当前片段。
  • @NirmalPrajapat 你能帮我解答吗
  • @Nilma 我刚刚发布了一个答案。 .看看这个

标签: android android-tablayout floating-action-button


【解决方案1】:
int position=0; 
     tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener(){
 @Override public void onTabSelected(TabLayout.Tab tab){ 
position = tab.getPosition(); 
} });

fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    setdailog(position);
                }
            });

现在

 public void setdailog(int currentTab)
        {


            final Dialog  cpDialog = new Dialog(getActivity());
            cpDialog.setTitle("Select Language");
            cpDialog.setContentView(R.layout.alert_list);
            ListView listView = (ListView) cpDialog.findViewById(R.id.listiview_lang);
            AlertListAdapter mAdapter = new AlertListAdapter(langList, getActivity());
            listView.setAdapter(mAdapter);
            listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    SELECTED_LANGUAGE = langList.get(position).getLangid();
                    System.out.println("JO JO"+SELECTED_LANGUAGE);

                    Intent intent=new Intent(getActivity(),MusicActivity.class);
                    intent.putExtra("langlist",langList);
                    intent.putExtra("selid",catid);
                    intent.putExtra("langid",SELECTED_LANGUAGE);
                    intent.putExtra("langname",langList.get(position).getLangname());
                    intent.putExtra("selcat",sel_cat);
                    intent.putExtra("currentTab" , currentTab);
                    startActivity(intent);
                    finish();
                    cpDialog.dismiss();

                }
            });
            cpDialog.show();
        }

现在在 MusicActivity.java

    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    Intent intent  = getIntent();
    int currentTab = intent.getIntExtra("currenttab", 0);
//here you can check if you get 1, 2 or 3 in currentTab then you have to set current tab to 1, 2 or 3 respectively.
    }

【讨论】:

  • 什么是 getCurrentTab ?
  • 是的,你在片段中使用它
  • getCurrentTab() 是自定义TabLayout的方法,会返回当前标签页数
  • tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener(){ @Override public void onTabSelected(TabLayout.Tab tab){ int position = tab.getPosition(); } }); 用这个代替 getCurrentTab()
  • 一样什么??任何错误或异常或其他情况
猜你喜欢
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多