【问题标题】:Button OnClick from an Activity to a specific Tab/Fragment从 Activity 到特定选项卡/片段的按钮 OnClick
【发布时间】:2021-12-14 08:21:09
【问题描述】:

这就是问题所在。我在一个活动中有 7 个按钮,在不同的活动中有 7 个选项卡/片段。 7 个标签/片段是可滑动的。我想让按钮能够打开它们各自的选项卡。例如,单击按钮 1 将重定向到选项卡/片段 1,单击按钮 2 将打开选项卡/片段 2,等等。那么,如何使按钮按预期工作?任何答案或想法将不胜感激。提前谢谢你。

这是我的代码: TabbedActivity.java

public class TabbedActivity extends AppCompatActivity {

    TabLayout tabLayoutaa;
    ViewPager2 pager2aa;
    FragmentAdapter adapteraa;
    int value;

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

        tabLayoutaa = findViewById(R.id.tab_layoutaa);
        pager2aa = findViewById(R.id.view_pager2aa);

        FragmentManager fm = getSupportFragmentManager();
        adapteraa = new FragmentAdapter(fm, getLifecycle());
        pager2aa.setAdapter(adapteraa);

        tabLayoutaa.setTabMode(tabLayoutaa.MODE_SCROLLABLE);
        tabLayoutaa.addTab(tabLayoutaa.newTab().setText("Tab 1"));
        tabLayoutaa.addTab(tabLayoutaa.newTab().setText("Tab 2"));
        tabLayoutaa.addTab(tabLayoutaa.newTab().setText("Tab 3"));
        tabLayoutaa.addTab(tabLayoutaa.newTab().setText("Tab 4"));
        tabLayoutaa.addTab(tabLayoutaa.newTab().setText("Tab 5"));
        tabLayoutaa.addTab(tabLayoutaa.newTab().setText("Tab 6"));
        tabLayoutaa.addTab(tabLayoutaa.newTab().setText("Tab 7"));

        tabLayoutaa.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                pager2aa.setCurrentItem(tab.getPosition());
            }

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

            }

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

            }
        });

        pager2ah.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageSelected(int position) {
                tabLayoutaa.selectTab(tabLayoutaa.getTabAt(position));
            }
        });
    }
}

ButtonList.java

public class ButtonList extends AppCompatActivity {


    private Button btntotab1;
    private Button btntotab2;

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

        btntotab1 = (Button)findViewById(R.id.btntotab1);
        btntotab1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                openTab1();
            }
        });
    }

    public void openTab1(){
        Intent intent = new Intent(this, TabbedActivity.class);
        startActivity(intent);
    }
}

【问题讨论】:

    标签: java android button fragment tabview


    【解决方案1】:

    在 Android IDE 的右侧面板中搜索每个按钮的 onclick 属性。 将您的标签更改功能放在那里。在 Main Activity 中,在按钮函数中使用 switch 语句比较 id。

    在xml中每个按钮的onclick属性中使用相同的功能

    就像在 MainActivity 你有函数:openTab() 一样。

    public void OpenTab(View view)
    {
        switch view.getId()
        {
            case r.id.xx:
            // Your working
            break;
        }
    }
    

    【讨论】:

    • 你能根据我的代码展示一个例子吗?我似乎明白了这个想法,但我并没有真正了解如何编写代码。
    【解决方案2】:

    首先,将您的 buttonId 传递给包含所有选项卡/片段的 Activity。

    ButtonList.java

       public class ButtonList extends AppCompatActivity {
        private Button btntotab1;
        private Button btntotab2;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_buttonlist);
        
            btntotab1 = (Button)findViewById(R.id.btntotab1);
            btntotab1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    openTab(1);
                }
            });
           btntotab2 = (Button)findViewById(R.id.btntotab2);
            btntotab2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    openTab(2);
                }
            });
        }
        
        public void openTab(int buttonId){
            Intent intent = new Intent(this, TabbedActivity.class);
            intent.putExtra("button_id",buttonId);
            startActivity(intent);
        }
       }
    

    现在将该 buttonId 传递给 fragmentManager 或您的 viewPager。

    TabbedActivity.java

     public class TabbedActivity extends AppCompatActivity {
    
    TabLayout tabLayoutaa;
    ViewPager2 pager2aa;
    FragmentAdapter adapteraa;
    int value, buttonId;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tabbed);
    
        tabLayoutaa = findViewById(R.id.tab_layoutaa);
        pager2aa = findViewById(R.id.view_pager2aa);
         buttonId=getIntent().getIntExtra("button_id",0); // to get the button id
    
        FragmentManager fm = getSupportFragmentManager();
        adapteraa = new FragmentAdapter(fm, getLifecycle());
        pager2aa.setAdapter(adapteraa);
       
        tabLayoutaa.setTabMode(tabLayoutaa.MODE_SCROLLABLE);
        tabLayoutaa.addTab(tabLayoutaa.newTab().setText("Tab 1"));
        tabLayoutaa.addTab(tabLayoutaa.newTab().setText("Tab 2"));
        tabLayoutaa.addTab(tabLayoutaa.newTab().setText("Tab 3"));
        tabLayoutaa.addTab(tabLayoutaa.newTab().setText("Tab 4"));
        tabLayoutaa.addTab(tabLayoutaa.newTab().setText("Tab 5"));
        tabLayoutaa.addTab(tabLayoutaa.newTab().setText("Tab 6"));
        tabLayoutaa.addTab(tabLayoutaa.newTab().setText("Tab 7"));
    
         pager2aa.setCurrentItem(buttonId-1);  // to get the current Tab
    
        tabLayoutaa.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                pager2aa.setCurrentItem(tab.getPosition());
            }
    
            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
    
            }
    
            @Override
            public void onTabReselected(TabLayout.Tab tab) {
    
            }
        });
    
        pager2ah.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageSelected(int position) {
                tabLayoutaa.selectTab(tabLayoutaa.getTabAt(position));
            }
        });
    }
    }
    

    如果它不起作用,您也可以使用 switch case 来获取选定的选项卡并将其传递给片段管理器。 可能有一些语法错误,所以要小心。

    【讨论】:

    • 你能根据我的例子给我看一个开关盒的例子吗?我似乎明白了,但我不知道如何编写代码。
    • 您是否在不使用开关盒的情况下尝试了我的代码?
    • 我尝试使用您在上面给出的答案,但它对我不起作用
    猜你喜欢
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多