Ajouter imageview dynamique à la vue existante
Je suis de développer une application qui au démarrage montrera une pré-mise en page définie comme Image(1) dans la capture d'écran ci-dessous.
Maintenant onclick d'un bouton, je veux ajouter dynamiquement un autre point de vue comme Image(2) ci-dessous la capture d'écran d'affichage existant dans certains l'aiment Image(3) dans la capture d'écran ci-dessous.
Si onclick vous cliquez à nouveau, Image(2) sera ajouté à la vue existante ce qui donne quelque chose comme Image(4).
Comment puis-je y parvenir?
En recherchant, j'ai trouvé qu'elle exige quelque chose comme LayoutInflater.addView()
comme cette ou LinearLayout.addView()
comme cette.
Mais je ne sais pas exactement quoi utiliser dans mon cas.
Aussi, je ne suis pas d'essayer d'ajouter juste une vue unique sur le bouton de la souris, mais un groupe de certaines opinions comme imageview, 2 textviews,etc. comme indiqué dans Image(2).
Toute aide appréciée.
Edit 1:
J'ai essayé quelque chose comme ceci:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</LinearLayout>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="20dp"
android:onClick="addViews"
android:text="Add" />
</RelativeLayout>
MainActivity.java
public class MainActivity extends Activity {
LinearLayout main;
int count = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
main = (LinearLayout) findViewById(R.id.main);
}
public void addViews(View view) {
LayoutParams lparams = new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
Button btn = new Button(this);
btn.setLayoutParams(lparams);
count++;
btn.setText("Hello World : " + count);
main.addView(btn, count);
}
}
Il donne quelque chose comme ceci:
Maintenant, comment puis-je reconnaître bouton qui a été cliqué?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire beaucoup de choses pour obtenir que le travail, mais la meilleure approche pourrait être à l'aide de
ListView
etArrayAdapter
Créer une classe qui étend la classe
ArrayAdapter<Integer>
. Il y, créer uninterface
pour créer un "Listener".Définir un privé
OnListButtonItemClickedListener
sur votreArrayAdapter
, et de créer un public setter.Définir un bouton à l'intérieur d'une Mise en page en XML. Quelque chose comme cela va faire:
Créer un intérieur
ViewHolder
de classe à l'intérieur de votreArrayAdapter
classe comme ceci:Remplacer
getView
et de créer quelque chose comme ceci:De la carte ListView, et lorsque vous voulez en ajouter un nouveau, il suffit de faire ceci:
vh.b.setText(String.valueOf(getItem(i).intValue()));
??position
, pasi
. Je vais corriger maintenant.Ainsi, vous pouvez gonfler un point de vue à partir d'un XML de mise en page à partir d'un
Activity
comme ceView v = View.inflate(this, R.layout.whatever, null);
et puis vous pouvez l'ajouter à votre
LinearLayout
comme ceci:linearLayout.addView(v);
Si vous souhaitez accéder à l'intérieur de vues dans vos articles, vous pouvez le faire comme ceci:
TextView textView = (TextView) v.findViewById(R.id.textView1);
Donc, vous devez définir ce groupe de points de vue dans un XML de mise en page, de la gonfler, de manipuler son point de vue que vous avez besoin, puis de l'ajouter à votre
LinearLayout
.Notez que vous aurez besoin de votre LinearLayout orientation à la verticale ou il ne fonctionnera pas comme vous avez besoin.
Peut-être vous pouvez essayer ce
Suis-je clair? C'est quelque chose de similaire que l'adaptateur et le listview œuvres.
Je ne sais pas si cela correspond à ce que votre application est, mais essayez d'utiliser un
ListView
avec unArrayAdapter
. Vous commencerez avec un videListView
, tel que défini en XML, puis ajouter des éléments à un connectéArrayAdapter
dans le code. Chaque fois que le bouton est enfoncé, vous pouvez ajouter une image dans leArrayAdapter
et appel.notifyDataSetChanged()
. Cela devrait pile comme indiqué dans les images ci-dessus. Vous pouvez également utiliser un deuxièmeLinearLayout
à des éléments de groupe.EDIT:
Pour déterminer quel bouton est cliqué, il vous suffit de référence de la
View
passé à votreaddViews(View v)
méthode. Vous pouvez basculer sur l'id:Ou vous pouvez obtenir le texte de la touche d'une manière similaire en utilisant:
Si vous n'êtes pas sûr de savoir comment beaucoup de boutons, il y aura, je vous recommande d'utiliser les chaînes de méthode. Si les boutons de ne pas avoir de noms qui conviennent à analyser de cette manière, stocker des références à des boutons comme clés dans une table de hachage et d'utiliser une Chaîne de la valeur. Vous pouvez ensuite brancher le bouton pour obtenir la chaîne et faire tout ce qui est nécessaire.