进度条在API 23上不起作用或不可见

时间:2018-02-07 07:27:53

标签: android android-fragments android-progressbar

我在Android应用程序中使用进度条。除了API 23(Marshmallow)之外,它在大多数API上都可见。我曾经使用以下代码

在片段转换上显示它
mProgressBar.setVisibility(View.GONE)
mProgressBar.setVisibility(View.VISIBLE)

我使用了以下代码

<ProgressBar
        android:id="@+id/progress"
        android:layout_width="50dp"
        android:layout_height="match_parent"
        android:padding="15dp"
        android:layout_marginEnd="5dp"
        android:layout_marginRight="5dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:visibility="gone"
        android:indeterminateTint="@color/colorGreen"
        android:indeterminateTintMode="src_in"
        android:indeterminate="true" />

我已在模拟器和设备上检查过它。

请提供解决方案。

片段转换按如下方式完成,

按钮点击第一个片段(MSHCFragment),使用bundle

传递数据
mDataPassListener.onMSHCDataPass(bundle);

其中mDataPassListener是onMSHCDataPassListener接口的对象

其中MSHCFragment中定义了以下接口

public interface onMSHCDataPassListener{

        void onMSHCDataPass(Bundle bundle);
    }

这个监听器如下所示初始化,

@Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (OnFragmentInteractionListener) context;
            mDataPassListener = (onMSHCDataPassListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

MainActivity中实现的上述接口,以及MainActivity中的onMSHCDataPass代码如下,

@Override
    public void onMSHCDataPass(Bundle bundle) {
        MSHCRptFragment fragment = (MSHCRptFragment) getSupportFragmentManager().findFragmentById(R.id.mshcmain);

        if (fragment != null) {

     }
 else {

            MSHCRptFragment fragment1 = new MSHCRptFragment();
            Bundle args = new Bundle();
            args.putAll(bundle);
            fragment1.setArguments(args);
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            mViewPager.setPagingEnabled(false);
            transaction.replace(R.id.frag_mainlayout1, fragment1);
            transaction.addToBackStack(null);
            transaction.commit();
        }
    }

1 个答案:

答案 0 :(得分:2)

更新了进度条形码

<ProgressBar
        android:id="@+id/progressb"
        android:layout_centerInParent="true"
        android:layout_gravity="center"
        android:layout_height="100dp"
        android:layout_width="100dp"
        android:visibility="gone"
        style="?android:attr/progressBarStyleLarge"
        android:progressDrawable="@drawable/myprogress1"
        android:indeterminateDrawable="@drawable/myprogress1"
        app:layout_constraintDimensionRatio="1"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.542" />

如您所见,我已将以下属性添加到进度条

   style="?android:attr/progressBarStyleLarge"
   android:progressDrawable="@drawable/myprogress1"
   android:indeterminateDrawable="@drawable/myprogress1"

myprogress1.xml如下,在android studio中res下的drawable文件夹中创建了这个可绘制文件

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="360"
    android:duration="1">

    <shape
        android:innerRadiusRatio="3"
        android:shape="ring"
        android:thicknessRatio="8"
        android:useLevel="false">

        <size
            android:height="48dip"
            android:width="48dip" />

        <gradient
            android:centerColor="#AAFFCC"
            android:centerY="0.50"
            android:endColor="#78cc00"
            android:startColor="#55cc33"
            android:type="sweep"
            android:angle="270"
            android:useLevel="false" />

    </shape>

</rotate> 

并根据需要调用visible并消失,即mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.VISIBLE);