我如何在AsyncTask类中的onPostExecute方法中使用SnackBar?

时间:2017-04-20 10:33:22

标签: android android-asynctask android-snackbar

public class MyTask extends AsyncTask<Void, Integer, String>  {

@Override
protected void onPostExecute(String result) {

    textView.setText(result);
    button.setEnabled(true);

    progressDialog.hide();

    Snackbar snackbar;
    snackbar = Snackbar.make(/*what would i use here*/,"Download Complete", Snackbar.LENGTH_LONG);
    snackbar.show();
  }
}

3 个答案:

答案 0 :(得分:1)

您班上需要$analytics = new Google_Service_Analytics($client);

rootView

您在构造函数中将此private View rootView; 作为参数传递。

rootView

在您的通话活动中,您需要传递public MyTask(View rootView) { this.rootView = rootView; } 。这可以是任何rootView,在片段中通常已经被称为View,否则您只需要放置父布局。

rootView

然后在您的new AsyncTask(rootView).execute(); // execute() for starting your AsyncTask 中,您可以使用postExecute()这样的内容:

rootView

您案件的整个代码:

Snackbar.make(rootView, "a text", Snackbar.LENGTH_LONG).show();

答案 1 :(得分:0)

Snackbar.make()的第一个参数是您需要显示小吃店的布局。通常每个人都使用活动或片段的父布局,例如在屏幕底部显示小吃栏。

您应该做的是创建一个屏幕的父布局对象,在该对象中显示小吃栏并将其作为第一个参数提供。

答案 2 :(得分:0)

首先,给基础布局一个id。这是我的main_activity.xml

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/layoutxx"
tools:context="pzy64.aaa.MainActivity">

我将id作为layoutxx

这是我的MainActivity.java

public class MainActivity extends AppCompatActivity {
    ConstraintLayout layout;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    l = (ConstraintLayout)findViewById(R.id.layoutxx);
    new Test().execute();

}
class Test extends AsyncTask<Void,Void,Void>    {
    @Override
    protected Void doInBackground(Void... params) {
        return null;
    }
    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        Snackbar.make(layout,"Hello",Snackbar.LENGTH_SHORT).show();
    }
}
}

如果AsyncTask位于不同的文件上,您可能需要通过构造函数传递视图。在这种情况下,您不需要通过构造函数传递它。