android - 如何使用上一个和下一个按钮切换片段?
问题描述
我有 3 个片段类。当我在第一个片段类有两个按钮,即“下一个”和“上一个”时,“上一个”按钮应该保持不可点击,然后点击“下一个”按钮,片段类应该切换到第二个片段类,同样点击“下一个”按钮,它应该切换到第三个片段类,但保持“下一个”按钮不可点击。
我的问题是单击时没有任何按钮起作用。当我在第一页时,“下一个”按钮都不会切换到第二个片段类,“上一个”按钮仍然无法点击。
现在要检查一下,我正在将按钮的文本颜色更改为白色,以便让人感觉按钮不可点击。
public class HomeFormViewActivity extends AppCompatActivity implements
FirstPage.OnFragmentInteractionListener,
SecondPage.OnFragmentInteractionListener,
ThirdPage.OnFragmentInteractionListener {
Button button1, button2;
public FrameLayout frameLayout;
public FirstPage firstPage;
public SecondPage secondPage;
public ThirdPage thirdPage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_form_view);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
button1 = findViewById(R.id.pre_button);
button2 = findViewById(R.id.nxt_button);
frameLayout = findViewById(R.id.frame_layout);
firstPage = new FirstPage();
secondPage = new SecondPage();
thirdPage = new ThirdPage();
setFragment(firstPage); // To display first fragment
if (currentFragment() instanceof FirstPage){
Toast.makeText(this, "You are in first page", Toast.LENGTH_SHORT).show();
button1.setTextColor(getResources().getColor(R.color.LightGrey));
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setFragment(secondPage);
}
});
}
if (currentFragment() instanceof SecondPage){
Toast.makeText(this, "You are in second page", Toast.LENGTH_SHORT).show();
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setFragment(thirdPage);
}
});
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setFragment(firstPage);
}
});
}
if (currentFragment() instanceof ThirdPage){
Toast.makeText(this, "You are in third page", Toast.LENGTH_SHORT).show();
button2.setTextColor(getResources().getColor(R.color.LightGrey));
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setFragment(secondPage);
}
});
}
}
public Fragment currentFragment() {
return getSupportFragmentManager().findFragmentById(R.id.frame_layout);
}
private void setFragment(Fragment fragment) {
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame_layout, fragment);
fragmentTransaction.commit();
}
@Override
public void onFragmentInteraction(Uri uri) {
}
解决方案
您的实例检查方法在错误的地方。当您在 onCreate 中调用 setFragment 时,需要一些时间来替换 framelayout 中的片段。其次,您的检查条件不会在每次替换片段时运行。此外,您必须第一次添加片段,然后调用替换。
按钮点击应该是这样的:
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (currentFragment() instanceof FirstPage){
//Some code here
}else if (currentFragment() instanceof SecondPage){
//Some code here
}
}
});
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (currentFragment() instanceof FirstPage){
//Some code here
}else if (currentFragment() instanceof SecondPage){
//Some code here
}
}
});
我不擅长格式化。希望这是有道理的。
推荐阅读
- vb.net - '从字符串 "" 到类型 'Integer' 的转换无效。'
- varnish - 重新加载后清漆 FetchError 长达 30 秒
- gcc - 促进。使用短名称链接依赖项
- python-3.x - Pandas 在 read_csv 上弄乱了一个高分辨率整数
- python-3.x - 如何并行运行 bash 脚本
- javascript - 无响应的 UI 元素在调整大小后变得有响应
- javascript - 如何使用 aws ec2 浏览器连接到 http://localhost:4200
- javascript - 在 Salesforce(兔子洞)上检查时,阴影 DOM 未显示在带有阴影根的自定义元素中
- performance - 服务器可以从负载均衡器处理多少个 TCP 连接
- node.js - 如何减少 Ionic 4 编译时间