Je dispose d'une disposition personnalisée pour le fragment de liste. Dans cette mise en page personnalisée, je veux mettre une autre vue personnalisée (qui dessine des choses). Donc ma question est: comment ajouter une autre vue à convertView dans la méthode getView(). Voici ma méthode de getView:comment placer une vue personnalisée dans une vue de liste personnalisée pour le fragment de liste
private class TrainingAdapter extends ArrayAdapter<Product>
{
public TrainingAdapter(ArrayList<Product> list) {
super(getActivity(), 0, list);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null)
{
convertView = getActivity().getLayoutInflater().inflate(R.layout.trainings_custom_layer_listfragment, null);
}
Product p = getItem(position);
//references to text view and image view goes here
//begin to work with custom view
StarView sv = (StarView) convertView.findViewById(R.id.star_view);
return convertView; }
Voici ma mise en page:
<ImageView android:id="@+id/imageview_product_category"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="mini photo" />
<TextView android:id="@+id/textview_training_title"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_toRightOf="@id/imageview_product_category"
android:textColor="@color/text_color_white" />
<TextView android:id="@+id/textview_training_location"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_toRightOf="@id/imageview_product_category"
android:layout_below="@id/textview_training_title"
android:textColor="@color/text_color_white" />
<TextView android:id="@+id/textview_training_datetime"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_toRightOf="@id/imageview_product_category"
android:layout_below="@id/textview_training_location"
android:textColor="@color/text_color_white" />
<TextView android:id="@+id/textview_training_cost"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_toRightOf="@id/imageview_product_category"
android:layout_below="@id/textview_training_datetime"
android:textColor="@color/text_color_white" />
<TextView android:id="@+id/textview_training_registrationenddate"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_toRightOf="@id/imageview_product_category"
android:layout_below="@id/textview_training_cost"
android:textColor="@color/text_color_white" />
<jacky.practice.view_custom.StarView
android:id="@+id/star_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/imageview_product_category"
android:layout_below="@id/textview_training_registrationenddate"/>
code pour une vue personnalisée:
public class StarView extends View {
private Paint myPaint;
private int mLevel = 0;
public StarView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public StarView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public StarView(Context context) {
super(context);
init();
}
private void init()
{
myPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
myPaint.setColor(Color.GREEN);
}
public void setExpensive(int level)
{
mLevel = level;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(mLevel <= 3)
{
canvas.drawCircle(20, 20, 8, myPaint);
}
else if((mLevel > 3) && (mLevel <= 5))
{
canvas.drawCircle(20, 20, 8, myPaint);
canvas.drawCircle(40, 20, 8, myPaint);
}
else
{
canvas.drawCircle(20, 20, 8, myPaint);
canvas.drawCircle(40, 20, 8, myPaint);
canvas.drawCircle(60, 20, 8, myPaint);
}
canvas.restore();
}
}
Quel est le problème exactement ici? Je vois que vous avez StarView dans votre mise en page XML. Et que vous le trouverez dans 'convertView'. La vue personnalisée ne s'affiche-t-elle pas? Y a-t-il une exception qui est lancée? – Vikram
Désolé de ne pas être clair sur le problème. La vue personnalisée ne s'affiche pas. Ma première pensée était parce que c'est une autre vue donc elle ne peut pas être ajoutée dans une autre vue de cette façon, donc j'ai essayé de vous parent.addView() mais cela n'a pas fonctionné. – ngunha02
L'ajout de la vue (personnalisée ou non) n'est pas requis. Le spécifier en format XML devrait être suffisant. Est-ce que le XML que vous avez posté reflète le contenu exact de 'trainings_custom_layer_listfragment.xml'? Ou en avez-vous laissé des parties? – Vikram