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()));
}
この新しい画面にButton
を追加して、グラフの下に表示されるようにします。 LinearLayout
ビューを作成してからButton
を作成してこのビューに追加しようとしましたが、NullPointerException
sを取得するだけです。
任意の助けをいただければ幸いです。ありがとう
EDIT#1
NullPointerException
と 'force close'を作成したものを使用してみました。
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);
}
そして、ここに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)
logcatでこのエラーを処理するための行が明らかにありますが、必要かどうかはわかりませんか?
EDIT#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);
}
このメソッドは、上記と同じlogcatエラーNullPointerException
を生成し、行番号と関係があることを示しています。 27はlayout.addView
コード行。何か案は?再度、感謝します
この行:
layout = (LinearLayout) findViewById(R.id.statsviewlayout);
現在の「contentview」で「statsviewlayout」IDを探します。ここで設定しました:
setContentView(new GraphTemperature(getApplicationContext()));
そして、新しい「graphTemperature」はそのIDで何も設定しないと推測しています。
FindViewByIdで任意のビューを見つけることができると考えるのはよくある間違いです。 XMLにある(またはコードで指定され、IDが指定された)ビューのみを見つけることができます。
探しているレイアウトが見つからないため、nullpointerがスローされます。
layout.addView(buyButton);
その例外をスローします。
さらに:XMLからそのビューを取得する場合は、インフレータを使用する必要があります。
layout = (LinearLayout) View.inflate(this, R.layout.yourXMLYouWantToLoad, null);
「yourXMLYouWantToLoad.xml」というファイルにlinearlayoutがあると仮定します
setContentView
内のonCreate()
の先頭にレイアウトファイルを含め、プログラムで新しい要素を追加するためにこのレイアウトを取得したい場合は、これを試してください。
ViewGroup linearLayout = (ViewGroup) findViewById(R.id.linearLayoutID);
次に、たとえば新しいButton
を作成して追加するだけです。
Button bt = new Button(this);
bt.setText("A Button");
bt.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
linerLayout.addView(bt);