使用以编程方式创建的View

时间:2016-05-15 11:27:05

标签: android android-snackbar

我知道它适用于XML中的任何类型的视图,但是为什么在使用以编程方式创建的视图时它不起作用?

这是我的代码:

TextView tv = new TextView(getApplicationContext());
Snackbar snackbar = Snackbar.make(tv, "Welcome to AndroidHive", Snackbar.LENGTH_LONG);
snackbar.show();

这是我的错误:

*Process: com.cloudents.mysnackbar, PID: 9924
java.lang.NullPointerException
    at android.support.design.widget.Snackbar.<init>(Snackbar.java:180)
    at android.support.design.widget.Snackbar.make(Snackbar.java:206)
    at com.cloudents.mysnackbar.MainActivity$2.onClick(MainActivity.java:39)
    at android.view.View.performClick(View.java:4442)
    at android.view.View$PerformClick.run(View.java:18473)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5105)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
    at dalvik.system.NativeStart.main(Native Method)*

3 个答案:

答案 0 :(得分:1)

您无法使用TextView,只是实例化以显示SnackBar。它需要的是提交View合适的父。如果您没有,或者您不确定哪一个通过,请直接使用android.R.id.content

E.g。

Snackbar.make(findViewById(android.R.id.content), "Welcome to AndroidHive", Snackbar.LENGTH_LONG).show();

答案 1 :(得分:1)

是的,如果在您尝试展示TextView之前将动态创建的Layout添加到Snackbar,请确保您可以,就像这里一样,

TextView tv = new TextView(getApplicationContext());
        tv.setText("Button");
        tv.setId(5);
 ((LinearLayout) findViewById(R.id.myLinearLayout)).addView(tv);

然后你可以很容易地做到,

Snackbar snackbar = Snackbar.make(tv, "Welcome to AndroidHive", Snackbar.LENGTH_LONG);
        snackbar.show();

Snackbar将会出现。

答案 2 :(得分:1)

观点:

// create and execute UPDATE query
foreach($_POST['update_category'] as $number => $update_category) {
$query = "UPDATE goals SET category='$update_category',goal='".$_POST['update_goal'][$number]."' WHERE username='$username';";
mysql_query($query, $connection);
}

您要添加快餐栏视图的视图是不是快餐栏本身所以正如上面提到的@Blackbelt如果您只想将快餐栏添加到活动中使用findViewById(android.R.id。内容)另一方面,如果您想修改小吃栏视图本身的某些内容,如下所示:

Snackbar snackbar = Snackbar.make(view, "Welcome to AndroidHive",Snackbar.LENGTH_LONG);
snackbar.show();

此外,我还建议您在主布局中添加一个coordinatorlayout并添加小吃栏,以便用户可以滑动以关闭小吃栏。