Java 从asynktask在android活动中添加snackbar
从主要活动中,我称之为后台进程。在这个背景中有一个onprexecute方法,在else部分中有一个if-else条件,我需要添加一个SnackbarJava 从asynktask在android活动中添加snackbar,java,android,android-activity,android-asynctask,Java,Android,Android Activity,Android Asynctask,从主要活动中,我称之为后台进程。在这个背景中有一个onprexecute方法,在else部分中有一个if-else条件,我需要添加一个Snackbar 显示基本SnackBar的代码段如下所示: Snackbar snackbar = Snackbar .make(coordinatorLayout, "www.journaldev.com", Snackbar.LENGTH_LONG); snackbar.show(); 在上述代码段中,make方法接受三个参数: coord
显示基本SnackBar的代码段如下所示:
Snackbar snackbar = Snackbar
.make(coordinatorLayout, "www.journaldev.com", Snackbar.LENGTH_LONG);
snackbar.show();
在上述代码段中,make方法接受三个参数:
coordinatorLayout:它是活动的根布局
www.journaldev.com:这是将出现在snackbar上的消息,我们可以使用自己的消息对其进行定制
Snackbar.LENGH_LONG:这是最后一个参数,它是显示Snackbar的时间限制
show方法用于在屏幕上显示SnackBar
这对您有帮助吗?此Snackbar.makethis.findviewbyandroid.R.id.content、Message、Snackbar.LENGTH\u LONG.show
这是行不通的。findViewById是活动类而不是AsyncTask的方法
将接口用作回调
interface Callback {
public void showSnackBar();
}
在异步任务中
private Callback callback;
然后
然后在OnPreecute
else {
if(callback!=null)
callback.showSnackbar();
}
在活动类中实现接口和方法
public YourActivity extends AppCompatActivity implements Callback {
然后
您还可以使用一些事件总线机制,而不是上述机制。如果您没有传递上下文,请使用活动在该上下文中查找视图,因为您在异步类中,您无权访问活动视图
Snackbar.make(MainActivity.this.findViewById(android.R.id.content), "Message", Snackbar.LENGTH_LONG).show();
然后添加它,问题是什么?在这个.findviewbyandroid.R.id.content中,它显示findViewById无法解析方法findviewbydint这是正确的,因为AsyncTask没有这样的方法。例如,您需要以与上下文相同的方式在构造函数参数中传递视图,并在Snackbar中使用它。您能告诉如何传递它background Context ctx{->background Context ctx,View View View吗{.然后将视图存储到一个字段中,并传入Snackbar:Snackbar.makeview,Message,Snackbar.LENGTH\u LONG.show;这是一个重复的问题。[这里]我的gradle已经编译了'com.android.support:design:25.2.0'现在仍然显示SameCoull你可以试试这个文档也许它可以帮助你检查失败的地方。另外@raghundandan的答案似乎解释得很好。MainActivity不是一个封闭类使用适当的活动或片段在你的id内容视图所在的地方。我需要它在主活动中,它是一个proper activity因此,在主activity layout.xml文件中应该有一个包含id内容的视图,如果没有得到,请在此处添加xml代码。
public YourActivity extends AppCompatActivity implements Callback {
@Override
public void showSnackBar()
{
// show snack bar in activity
}
Snackbar.make(MainActivity.this.findViewById(android.R.id.content), "Message", Snackbar.LENGTH_LONG).show();