mmm*_*eys 34 android button android-activity
我在向XML创建的布局中添加按钮时遇到了问题.这就是我想要实现的目标:
//some class
else {
startActivity(new Intent(StatisticsScreen.this, ScreenTemperature.class));
}
////
//ScreenTemperatureClass
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//this is where I call another class that
//displays a nice graph
setContentView(new GraphTemperature(getApplicationContext()));
}
Run Code Online (Sandbox Code Playgroud)
我想在Button这个新屏幕上添加一个,以便它显示在图表下方.我已经尝试创建一个LinearLayout视图,然后创建一个Button并将其添加到此视图但我只是得到了NullPointerException...
任何帮助,将不胜感激.谢谢
编辑#1
这是我尝试使用的创建了一个NullPointerException'强制关闭':
Button buybutton;
LinearLayout layout;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new GraphTemperature(getApplicationContext()));
layout = (LinearLayout) findViewById(R.id.statsviewlayout);
Button buyButton = new Button(this);
buyButton.setText(R.string.button_back);
buyButton.setLayoutParams(new LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
layout.addView(buyButton);
}
Run Code Online (Sandbox Code Playgroud)
这是logcat错误:
ERROR/AndroidRuntime(293): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.weatherapp/com.weatherapp.ScreenTemperature}: java.lang.NullPointerException
ERROR/AndroidRuntime(293): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
ERROR/AndroidRuntime(293): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
ERROR/AndroidRuntime(293): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
ERROR/AndroidRuntime(293): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
Run Code Online (Sandbox Code Playgroud)
在logcat中这个错误显然更多的线路,不确定你是否想要它?
编辑#2
所以我尝试了bhups方法:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GraphTemperature GT = new GraphTemperature(getApplicationContext());
layout = (LinearLayout) findViewById(R.id.statsviewlayout);
Button buyButton = new Button(this);
buyButton.setText(R.string.button_back);
buyButton.setLayoutParams(new LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
layout.addView(GT); // line 27
layout.addView(buyButton);
setContentView(layout);
}
Run Code Online (Sandbox Code Playgroud)
此方法产生与上面相同的logcat错误NullPointerException,表明它与行号有关.27这是layout.addView代码行.有任何想法吗?再次感谢
Ale*_*Cio 33
如果您刚刚在onCreate()内部开头包含了一个布局文件,setContentView并希望以编程方式添加新元素,请尝试以下方法:
ViewGroup linearLayout = (ViewGroup) findViewById(R.id.linearLayoutID);
Run Code Online (Sandbox Code Playgroud)
那么你可以创建一个新Button的例子,然后添加它:
Button bt = new Button(this);
bt.setText("A Button");
bt.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
linerLayout.addView(bt);
Run Code Online (Sandbox Code Playgroud)
Nan*_*nne 32
这一行:
layout = (LinearLayout) findViewById(R.id.statsviewlayout);
Run Code Online (Sandbox Code Playgroud)
在您当前的"contentview"中查找"statsviewlayout"ID.现在你在这里设置:
setContentView(new GraphTemperature(getApplicationContext()));
Run Code Online (Sandbox Code Playgroud)
我猜测新的"graphTemperature"没有设置任何ID.
认为你可以用findViewById找到任何视图是一个常见的错误.您只能找到XML中的视图(或由代码指定并给出ID).
将抛出nullpointer,因为找不到您要查找的布局,所以
layout.addView(buyButton);
Run Code Online (Sandbox Code Playgroud)
抛出那个例外.
另外:现在,如果您想从XML获取该视图,您应该使用inflater:
layout = (LinearLayout) View.inflate(this, R.layout.yourXMLYouWantToLoad, null);
Run Code Online (Sandbox Code Playgroud)
假设您在名为"yourXMLYouWantToLoad.xml"的文件中包含linearlayout
| 归档时间: |
|
| 查看次数: |
135538 次 |
| 最近记录: |