如何访问膨胀布局内的 TextView 的值
How to access the value of a TextView that is inside an inflated layout
我需要能够访问文本视图中的双精度数 'quota' 以便用它做一些数学运算。问题是我在应该获取值的行上遇到错误。这可能是因为 textview 在膨胀的布局中,我不确定。
我试过使用我的适配器中设置的名称,我认为这可能是访问它的方式,但没有成功。
在mainclass中找到textview,调用quota
quota = findViewById(R.id.textView_dailyData_BricksQuota);
在适配器 class 中找到文本视图,将其称为 dataBricksQuota,尝试在主 class 中调用它,但不起作用
TextView dataBricksQuota = view.findViewById(R.id.textView_dailyData_BricksQuota);
dataBricksQuota.setText(String.valueOf(project.getBricksQuota()));
问题出现在这个 if 语句的第一行,我试图在主 class
中获取 textview 的值
if (projectDay >= 2) {
String currentBrickQuota = quota.getText().toString();
double currentBrickQuotaDouble = Double.parseDouble(currentBrickQuota);
double averageBrickRunningQuota = ((2 * currentBrickQuotaDouble + averageBricksNDatabase) / projectDay);
String sql = "UPDATE activeProjectsTable SET averageBricks = ? WHERE ProjectId = (SELECT MAX(ProjectId) FROM activeProjectsTable)";
AusWideDatabase.execSQL(sql, new Double[] {
averageBrickRunningQuota
});
}
我原以为它会简单地获取 textview 的值,因此可以在等式中使用它,但是当我 运行 if 语句时,出现错误。
错误
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
at android.view.View.performClick(View.java:7333)
at android.widget.TextView.performClick(TextView.java:14160)
at android.view.View.performClickInternal(View.java:7299)
at android.view.View.access00(View.java:846)
at android.view.View$PerformClick.run(View.java:27774)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:6981)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.widget.TextView.getText()' on a null object reference
at com.auswide.auswideapp.dailyData.LoadEodChecklist(dailyData.java:145)
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
at android.view.View.performClick(View.java:7333)
at android.widget.TextView.performClick(TextView.java:14160)
at android.view.View.performClickInternal(View.java:7299)
at android.view.View.access00(View.java:846)
at android.view.View$PerformClick.run(View.java:27774)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:6981)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)
不完全是问题的答案,但我突然意识到这只是用户的视觉辅助。我为配额设置了一个全局变量,并在等式为 运行 时相应地修改了它,然后简单地再次调用该变量以替换它在 textview 上的内容。
如果你传递主 class 的上下文,你可以这样做。代码如下
TextView textView = ((Activity)context).findViewById(R.id.yourTextView); // -> context must be context of your main class
textView.setText("Hello world"); // -> textView variable is not null, so it will assign text to textView
另一种方法是膨胀整个布局,但我发现它在这种情况下没有用。
我需要能够访问文本视图中的双精度数 'quota' 以便用它做一些数学运算。问题是我在应该获取值的行上遇到错误。这可能是因为 textview 在膨胀的布局中,我不确定。
我试过使用我的适配器中设置的名称,我认为这可能是访问它的方式,但没有成功。
在mainclass中找到textview,调用quota
quota = findViewById(R.id.textView_dailyData_BricksQuota);
在适配器 class 中找到文本视图,将其称为 dataBricksQuota,尝试在主 class 中调用它,但不起作用
TextView dataBricksQuota = view.findViewById(R.id.textView_dailyData_BricksQuota);
dataBricksQuota.setText(String.valueOf(project.getBricksQuota()));
问题出现在这个 if 语句的第一行,我试图在主 class
中获取 textview 的值if (projectDay >= 2) {
String currentBrickQuota = quota.getText().toString();
double currentBrickQuotaDouble = Double.parseDouble(currentBrickQuota);
double averageBrickRunningQuota = ((2 * currentBrickQuotaDouble + averageBricksNDatabase) / projectDay);
String sql = "UPDATE activeProjectsTable SET averageBricks = ? WHERE ProjectId = (SELECT MAX(ProjectId) FROM activeProjectsTable)";
AusWideDatabase.execSQL(sql, new Double[] {
averageBrickRunningQuota
});
}
我原以为它会简单地获取 textview 的值,因此可以在等式中使用它,但是当我 运行 if 语句时,出现错误。
错误
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
at android.view.View.performClick(View.java:7333)
at android.widget.TextView.performClick(TextView.java:14160)
at android.view.View.performClickInternal(View.java:7299)
at android.view.View.access00(View.java:846)
at android.view.View$PerformClick.run(View.java:27774)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:6981)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.widget.TextView.getText()' on a null object reference
at com.auswide.auswideapp.dailyData.LoadEodChecklist(dailyData.java:145)
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
at android.view.View.performClick(View.java:7333)
at android.widget.TextView.performClick(TextView.java:14160)
at android.view.View.performClickInternal(View.java:7299)
at android.view.View.access00(View.java:846)
at android.view.View$PerformClick.run(View.java:27774)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:6981)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)
不完全是问题的答案,但我突然意识到这只是用户的视觉辅助。我为配额设置了一个全局变量,并在等式为 运行 时相应地修改了它,然后简单地再次调用该变量以替换它在 textview 上的内容。
如果你传递主 class 的上下文,你可以这样做。代码如下
TextView textView = ((Activity)context).findViewById(R.id.yourTextView); // -> context must be context of your main class
textView.setText("Hello world"); // -> textView variable is not null, so it will assign text to textView
另一种方法是膨胀整个布局,但我发现它在这种情况下没有用。