[英]add snackbar in android activity from asynktask
在main
活動中,我稱此為后台過程。 在這種背景下,這里有onprexecute
方法, else
我需要添加一個Snackbar
的if else
條件
public class background extends AsyncTask<String,Void,String> {
private ProgressDialog dialog;
private ProgressDialog progressDialog;
private ConnectivityManager cm;
private String jsonurl, jsonstring;
public static String listRequest;
private mobile_form mform;
private Context ctx;
ProgressBar progressbar;
background (Context ctx){
this.ctx = ctx;
cm = (ConnectivityManager)ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
dialog = new ProgressDialog(ctx);
progressbar = new ProgressBar(ctx);
progressbar.getIndeterminateDrawable().setColorFilter(Color.parseColor("#039BE5"), android.graphics.PorterDuff.Mode.SRC_IN);
mform = new mobile_form();
}
@Override
protected void onPreExecute() {
super.onPreExecute();
jsonurl = "https://crackstrickblog.000webhostapp.com/json_get_data.php";
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
if (isConnected) {
dialog.setCancelable(false);
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.show();
dialog.setContentView(progressbar);
}
else {
// here i need to add snackbar like this
//Snackbar.make(this.findViewById(android.R.id.content), "Message", Snackbar.LENGTH_LONG).show();
}
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(String result) {
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
if (isConnected) {
ctx.startActivity(new Intent(ctx, mobile_form.class));
if (dialog.isShowing())
dialog.dismiss();
}
}
@Override
protected String doInBackground(String... voids) {
return null;
}
}
此Snackbar.make(this.findViewById(android.R.id.content), "Message", Snackbar.LENGTH_LONG).show();
不管用。 findViewById
是不是AsyncTask
的活動類的方法。
使用接口作為回調。
interface Callback {
public void showSnackBar();
}
在AsyncTask中
private Callback callback;
然后
public background (Context ctx){
callback =(Callback) ctx;
然后在onPreExecute
else {
if(callback!=null)
callback.showSnackbar();
}
在活動類中實現接口和方法
public YourActivity extends AppCompatActivity implements Callback {
然后
@Override
public void showSnackBar()
{
// show snack bar in activity
}
您也可以使用某些事件總線機制來代替上述機制。
下面顯示了顯示基本SnackBar的代碼段:
Snackbar snackbar = Snackbar
.make(coordinatorLayout, "www.journaldev.com", Snackbar.LENGTH_LONG);
snackbar.show();
在上面的代碼段中,make()方法接受三個參數:
coordinatorLayout:它是活動的根目錄
www.journaldev.com:這是出現在快餐欄上的消息,我們可以使用自己的消息進行自定義
Snackbar.LENGH_LONG:這是最后一個參數,它是時間限制顯示小吃條多長時間
show()方法用於在屏幕上顯示SnackBar。
這對您有幫助嗎?
您沒有像通過異步類那樣傳遞上下文,而是使用您的活動在該上下文中查找視圖,您無權訪問活動視圖。
Snackbar.make(MainActivity.this.findViewById(android.R.id.content), "Message", Snackbar.LENGTH_LONG).show();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.