Insertion dynamique de données dans une vue personnalisée
salut à tous
j'aimerais créer une vue personnalisée contenant des textview et d'imageview aux quels je vais insérer de façon dynamique l’image et les textest.
La création de la vue n'a pas été un problème mais l'insertion dynamique en est un j'ai essayer une idée que mais j'ai pas une de satisfaction.Tous aide sera la bienvenue j'en ai besoin
voici le code java de ma vue personnalisée
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| import android.widget.RelativeLayout;
import android.widget.TextView;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TableRow;
import android.widget.ImageView;
import com.rami.essai.R;
public class AnnonceView extends RelativeLayout {
private ImageView imagprofil = null;
private TextView nomprofil = null;
private TextView numero = null;
private TextView contenuanonc = null;
public AnnonceView(Context context, AttributeSet attrs, int
defStyle) {
super(context, attrs, defStyle);
init();
}
public AnnonceView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public AnnonceView(Context context) {
super(context);
init();
}
private void init() {
inflate(getContext(), R.layout.annonceview, this);
}
public void bind(int image, int text, int text2 ,int text3 ) {
imagprofil.setImageResource(image);
nomprofil.setText(getResources().getString(text));
numero.setText(getResources().getString(text2));
contenuanonc.setText(getResources().getString(text3));
addView(imagprofil, R.id.imagprofil);
addView(nomprofil, R.id.nomprofil);
addView(numero, R.id.numero);
addView(contenuanonc, R.id.contenuanonc);
}
} |
Ensuite ici c'est le contenu de mon adapter
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
| import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
public class AnnonceViewAdapter extends BaseAdapter {
private static final int TYPE_HEADER = 0;
private static final int TYPE_BODY = 1;
private static final int TYPE_MAX = 2;
private List<Integer> mTypes = new ArrayList<Integer>();
private AnnonceViewModel mModelHeader = null;
private List<Integer> mModelBody = new ArrayList<Integer>();
private Context mContext;
public AnnonceViewAdapter(Context context) {
mContext = context;
}
@Override
public int getViewTypeCount() {
return TYPE_MAX;
}
@Override
public int getItemViewType(int position) {
return mTypes.get(position);
}
@Override
public int getCount() {
if (mModelHeader == null)
return mModelBody.size();
return 1 + mModelBody.size();
}
@Override
public Object getItem(int position) {
int type = getItemViewType(position);
return type == TYPE_HEADER ? mModelHeader : mModelBody
.get(position - 1);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = null;
int type = getItemViewType(position);
if (convertView == null) {
switch (type) {
case TYPE_HEADER:
v = new AnnonceView(mContext);
break;
}
} else {
switch (type) {
case TYPE_HEADER:
v = (AnnonceView) convertView;
break;
}
switch (type) {
case TYPE_HEADER:
AnnonceViewModel model1 = (AnnonceViewModel) getItem(position);
((AnnonceView) v).bind(model1.getImageRessource(),
model1.getTextRessource(), model1.getTextRessource2(), model1.getTextRessource3());
break;
}
}
return v;
}
public void bindHeader(AnnonceViewModel model) {
mModelHeader = model;
mTypes.add(TYPE_HEADER);
}
public void bindBody(List<Integer> model) {
mModelBody = model;
for (int i = 0; i < model.size(); i++) {
mTypes.add(TYPE_BODY);
}
}
} |
Ici c'est le contenu de la classe qui me permet d’insérer les données dans ma vue personnelle
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| public class AnnonceViewModel {
private int mImageRessource;
private int mTextRessource;
private int mTextRessource2;
private int mTextRessource3;
public AnnonceViewModel(int image, int text, int text2, int text3) {
super();
this.mImageRessource = image;
this.mTextRessource = text;
this.mTextRessource2 = text2;
this.mTextRessource3 = text3;
}
public int getImageRessource() {
return mImageRessource;
}
public int getTextRessource() {
return mTextRessource;
}
public int getTextRessource2() {
return mTextRessource2;
}
public int getTextRessource3() {
return mTextRessource3;
}
} |
Étant données que j'ai utilisé un fragment voici le contenu de l’activité auquel le fragment est attaché
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import com.rami.essai.R;
public class EssaiActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_essai2);
}
} |
voici le contenu de mon fichiers xml d'affichage de la vue personnalisée qui est attacher à un fragment
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
| <?xml version="1.0" encoding="utf-8"?>
<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="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
android:background="#FFFFFF" >
<ImageView
android:id="@+id/imagprofil"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
/>
<TextView
android:id="@+id/nomprofil"
android:text=""
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_toRightOf="@id/imagprofil"
android:textSize="20sp"
android:layout_marginLeft="10dp"/>
<TextView
android:id="@+id/numero"
android:text=""
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_toRightOf="@id/nomprofil"
android:textSize="20sp"
android:layout_marginLeft="10dp"/>
<TextView
android:id="@+id/contenuanonc"
android:text=""
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_below="@id/imagprofil"
android:textSize="20sp"
android:layout_marginLeft="10dp"/>
<TextView
android:id="@+id/persinteresser"
android:layout_below="@id/contenuanonc"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Intéressé"
android:textSize="18sp"
android:layout_marginLeft="10dp"
/>
<TextView
android:id="@+id/commentaire"
android:layout_below="@id/contenuanonc"
android:layout_toRightOf="@id/persinteresser"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Commentaires"
android:textSize="18sp"
android:layout_marginLeft="15dp"
/>
<TableRow
android:id="@+id/interess"
android:layout_below="@id/persinteresser"
android:layout_marginTop="20dp"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="50dp">
<TextView
android:id="@+id/boutoninteresser"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Je suis interessé"
android:textSize="20sp"
android:textStyle="bold"
android:layout_gravity="center"
android:gravity="center"
android:layout_marginLeft="5dp"/>
</TableRow>
<TableRow
android:id="@+id/commenter"
android:layout_below="@id/persinteresser"
android:layout_marginTop="20dp"
android:orientation="vertical"
android:layout_weight="1"
android:layout_marginRight="10dp"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@id/interess"
android:layout_width="wrap_content"
android:layout_height="50dp">
<TextView
android:id="@+id/boutoncommenter"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Commenter"
android:textStyle="bold"
android:textSize="18sp"
android:layout_gravity="center"
android:gravity="center"
android:layout_marginLeft="5dp"/>
</TableRow>
</RelativeLayout> |
voici le contenu du fragment de la vue personnaliée
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| import android.app.Activity;
import com.rami.essai.AnnonceView;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.LinearLayout;
import android.widget.RadioGroup.LayoutParams;
import android.widget.RelativeLayout;
import android.widget.AdapterView;
import android.widget.TextView;
import android.widget.ImageView;
import android.view.LayoutInflater;
import android.support.v4.app.Fragment;
import android.view.ViewGroup;
import android.view.View;
import android.widget.AdapterView;
import android.support.v4.app.ListFragment;
public class Essai extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return vue;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
AnnonceViewModel publi = new AnnonceViewModel(
R.drawable.bn_12, R.string.nomprof , R.string.numero, R.string.annonce);
AnnonceViewAdapter adapter = new AnnonceViewAdapter(
getActivity());
adapter.bindHeader(publi);
}
} |
Ici c'est le contenu du fichier xml lier a l'activité
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <LinearLayout 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"
android:orientation="vertical"
android:background="#E7F4F0"
android:id="@+id/affiche"
tools:context="${relativePackage}.${activityClass}" >
<com.rami.essai.AnnonceView
android:id="@+id/ann"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout> |