2016-01-24 65 views
0

我想创建一个进度条,可以在我的应用程序中的多个活动中使用。进度条包含一些逻辑,例如何时重置,进度条增加的速度等。创建一个可以被多个活动使用的组件

而不是在每个活动中创建和编码逻辑以实现进度条,我希望在单独的类中创建它但我不确定如何做到这一点。我遇到了包含标签,它允许您重新使用布局,但我不确定如何实施进度栏附带的逻辑。有没有人有任何建议/建议最好的方法来解决这个问题?

+1

您可以创建成一个习俗基本活动,并让所有活动扩展它。 AppCompatActivity < - MyBaseActivity < - 所有其他活动 – thetonrifles

回答

1

正如我在评论中写道,你可以定义一个自定义的活动与显示/隐藏进度条的方法,然后让所有其他活动扩展它。

我提供你一个例子使用自定义ProgressDialog:

public class BaseActivity extends AppCompatActivity { 

    private MyProgressDialog mLoader; 

    protected void showLoader() { 
     if (mLoader == null) { 
      mLoader = new MyProgressDialog(this); 
     } 
     if (!mLoader.isShowing()) { 
      mLoader.show(); 
     } 
    } 

    protected void hideLoader() { 
     if (mLoader != null && mLoader.isShowing()) { 
      mLoader.dismiss(); 
     }  
    } 

} 

public class MyActivity extends BaseActivity { 

    // here you can use showLoader and hideLoader wherever you need 

} 

当然你可以使用任何你想要的,而不是标准ProgressDialog中。例如,您可以定义一个自定义视图。重要的是,无论您将如何在BaseActivity中实现加载器,修改都将适用于您的所有活动。

这里是一个简单的自定义布局进度对话框的例子。

public class MyProgressDialog extends ProgressDialog { 

    public MyProgressDialog(Context context) { 
     super(context, R.style.AppTheme_Translucent); 
    } 

    public MyProgressDialog(Context context, int theme) { 
     super(context, theme); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.dialog_progress); 
     setCancelable(false); 
    } 

    @Override 
    public void setCancelable(boolean flag) { 
     super.setCancelable(flag); 
    } 

} 

dialog_progress.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#80000000" 
    android:keepScreenOn="true" > 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:background="@drawable/bg_progress_dialog" > 

     <ProgressBar 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_centerVertical="true" 
      android:layout_margin="12dp" 
      android:indeterminateTint="#00acff" 
      android:indeterminateTintMode="src_in" /> 
    </RelativeLayout> 

</RelativeLayout> 

bg_progress_dialog.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" > 

    <solid android:color="@android:color/black" /> 
    <corners android:radius="10dp" /> 

</shape> 

这是作风摆在styles.xml

<style name="AppTheme.Translucent"> 
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
</style> 
+0

感谢您的回答,我明白您在此处所做的关于如何实施逻辑。有一件事我仍然不确定 - XML布局。如果我想创建一个进度条,我可以在很多活动中使用,那么我必须具有一个我必须使用的常见视图 - 因为必须在扩展包含进度条的视图之前对其执行其他组件?这对我来说都是新的,请原谅我缺乏知识。 –

+0

@Perfect_Comment当然,这取决于你想实现的自定义组件类型。一般你需要做的是扩展一个已经存在的类(哪一个取决于你的需求)。例如,您可以创建一个扩展“FrameLayout”的类并将您想要的布局充填到其中。在进度指示器的情况下,可能会更好地扩展'ProgressDialog'类或甚至通用的'DialogFragment'。 – thetonrifles

+0

@Perfect_Comment我已经添加了一个扩展'ProgressDialog'的样本加载器的代码。 – thetonrifles

相关问题