Ajouter un bouton à une mise en page par programmation
Je vais avoir de la difficulté à l'ajout d'un bouton pour une mise en page que j'ai créé en XML. Voici ce que je veux réaliser:
//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()));
}
Je veux ajouter un Button
à ce nouvel écran afin qu'il apparaisse en dessous du graphique.
J'ai essayé de créer un LinearLayout
vue, puis créer un Button
et l'ajouter à ce point de vue, mais je viens d'obtenir NullPointerException
s..
Toute aide serait appréciée. Grâce
EDIT#1
Voici ce que j'ai essayé à l'aide de qui a créé un NullPointerException
et forcer la fermeture:
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);
}
Et voici le logcat erreur:
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)
theres abviously plus de lignes à faire avec cette erreur dans le logcat, vous ne savez pas si vous le voulez?
EDIT#2
J'ai donc essayé bhups méthode:
@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);
}
Cette méthode a produit le même logcat d'erreur comme ci-dessus, NullPointerException
, indiquant qu'il avait quelque chose à voir avec la ligne no. 27 qui est le layout.addView
ligne de code. Des idées? Merci encore
- montrez-nous ce que vous avez essayé et le logcat vous obtenez de course, donc nous essayons de savoir pourquoi vous obtenez npe. de toute façon envisager la création d'un
screen_temperature.xml
mise en page et l'utilisation qui ensetContentView()
. vous pouvez ajouter dans le xml de votre vue personnalisée par la spécification de l'ensemble du paquet, au lieu de simplement le nom (c'est à dire:<my.package.MyCustomView android:id.../>
) - créer un linéaire de la mise en page (ll) et ajouter GraphTemp vue de l'objet et de l'objet bouton de ll. Ensuite, réglez l'affichage du contenu de l'activité de ll. c'est à dire setContentView(ll);
Vous devez vous connecter pour publier un commentaire.
Cette ligne:
Semble pour le "statsviewlayout" id dans votre 'contentview'. Vous avez maintenant réglé que voici:
Et je suppose que les nouveaux "graphTemperature" ne permet pas de régler quoi que ce soit avec cet id.
C'est une erreur commune de penser que vous pouvez juste trouver un quelconque point de vue avec findViewById. Vous ne pouvez trouver un point de vue qui est dans le fichier XML (ou désigné par le code et donné un id).
La nullpointer sera levée, car la mise en page que vous recherchez n'est pas trouvé, donc
Jette cette exception.
outre:
Maintenant, si vous voulez obtenir ce point de vue à partir d'un fichier XML, vous devez utiliser un inflater:
en supposant que vous avez votre linearlayout dans un fichier appelé "yourXMLYouWantToLoad.xml"
setcontentview
n'est pas de l'information de cet identifiant, vous ne pouvez pas faire cela. Tant que le xml qui contient les "statsviewlayout" n'est pas défini à l'aide desetcontentview
le " findviewbyid` sera de retournull
Si vous avez inclus un fichier de mise en page au début de
onCreate()
à l'intérieur desetContentView
et que vous souhaitez obtenir cette mise en page pour ajouter de nouveaux éléments par programmation essayez ceci:ensuite, vous pouvez créer un nouveau
Button
par exemple, et il suffit de l'ajouter: