Android:碎片问题中的自定义工具栏

时间:2017-03-19 17:31:55

标签: android android-fragments toolbar

我的项目是为了一个测验,我把这些问题作为片段。我添加了一个自定义工具栏,其中包含导航按钮和问题#indicator(点)。我遇到了两个问题:

1.工具栏通过手势或按下/中的下一个按钮滑动问题/。我想,工具栏是用新片段创建的。我希望此工具栏是静态的 - 滑动/单击下一步应仅更改内容,工具栏不应移动。

  

我通过更改

解决了#1问题      
    

pager.setCurrentItem(pager.getCurrentItem() - 1, true );

    到
    pager.setCurrentItem(pager.getCurrentItem() - 1, false );

  

2.我想隐藏/显示某个片段上工具栏上的上一个/下一个按钮 - 第一个片段不应该有前一个按钮,最后一个片段不应该有下一个按钮。我试图改变FragmentActivity类(我已经改为AppCompatActivity)的可见性,但它给出了错误 - "试图在空对象引用上调用setVisibility"

我已在所有片段xml文件中使用<include layout="@layout/toolbar_layout"/>来包含工具栏。

工具栏xml

`<android.support.v7.widget.Toolbar android:id="@+id/toolbar2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorAccent"
android:minHeight="?attr/actionBarSize"
android:theme="?attr/actionBarTheme"
xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <ImageButton
        android:contentDescription="previous"
        android:id="@+id/previousQ"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="8dp"
        android:onClick="previousQ"
        android:visibility="invisible"
        android:background="@android:color/transparent"
        android:src="@drawable/ic_arrow_back_white" />
    <TextView
        android:id="@+id/countQ"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textSize="22sp"
        android:text="●○○○○"/>
    <ImageButton
        android:contentDescription="next"
        android:id="@+id/nextQ"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="8dp"
        android:onClick="nextQ"
        android:background="@android:color/transparent"
        android:layout_alignParentRight="true"
        android:src="@drawable/ic_arrow_forward_white" />
</RelativeLayout>

`

FragmentActivity类

public class QuizActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.view_pager);
    ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
    pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
    Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar2);
    setSupportActionBar(toolbar);
}

public void nextQ(View view) {
    ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
    pager.setCurrentItem(pager.getCurrentItem() + 1,true);
}

public void previousQ(View view) {
    ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
    pager.setCurrentItem(pager.getCurrentItem() - 1,true);
}
private class MyPagerAdapter extends FragmentPagerAdapter {

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

    @Override
    public Fragment getItem(int pos) {
        switch(pos) {
            case 0: return FirstFragment.newInstance("FirstFragment, Instance 1");
            case 1: return SecondFragment.newInstance("SecondFragment, Instance 1");
            case 2: return FirstFragment.newInstance("ThirdFragment, Instance 1");
            case 3: return FirstFragment.newInstance("ThirdFragment, Instance 1");
            case 4: return FirstFragment.newInstance("ThirdFragment, Instance 1");
            default: return FirstFragment.newInstance("ThirdFragment, Default");
        }
    }

    @Override
    public int getCount() {
        return 5;
    }
}'

1 个答案:

答案 0 :(得分:0)

您是如何尝试更改按钮可见性的?您可以尝试将id添加到相对布局中,然后以这种方式更改可见性:

toolbar2.findViewById(R.id.relativeLayoutId).findViewById(R.id.nextQ)

让我知道它是否有效。