从 Activity 到特定选项卡/片段的按钮 OnClick
Posted
技术标签:
【中文标题】从 Activity 到特定选项卡/片段的按钮 OnClick【英文标题】:Button OnClick from an Activity to a specific Tab/Fragment 【发布时间】: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);
【问题讨论】:
【参考方案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 来获取选定的选项卡并将其传递给片段管理器。 可能有一些语法错误,所以要小心。
【讨论】:
你能根据我的例子给我看一个开关盒的例子吗?我似乎明白了,但我不知道如何编写代码。 您是否在不使用开关盒的情况下尝试了我的代码? 我尝试使用您在上面给出的答案,但它对我不起作用以上是关于从 Activity 到特定选项卡/片段的按钮 OnClick的主要内容,如果未能解决你的问题,请参考以下文章
Acivity1 Fragment2 -> Activity2(单击按钮后)-> Activity1 Fragment2 从活动导航到特定片段