2013-09-07 6 views
0

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(); 
} 

}

+0

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

+0

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

+0

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

Répondre

0

Avez-vous oublié d'implémenter onCreateView?

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.main, null); 
    return view; 
} 
+0

Je devrais le rendre plus clair sur ma question que je suis créer un adaptateur personnalisé. Je vais le mettre à jour maintenant. – ngunha02

Questions connexes