2016-05-12 15 views
0

Ich habe bereits auf Stackoverflow für eine geeignete Antwort gesucht, konnte aber nichts finden, was mir helfen würde.onDraw() nicht in benutzerdefinierten Ansicht

Ich habe ein Fragment, das eine ListView enthält. Diese ListView sollte ein Array von benutzerdefinierten Ansichten anzeigen. Das Problem ist, dass die OnDraw() -Methode der benutzerdefinierten Ansichten nicht aufgerufen wird. Sie werden initialisiert, aber nicht gezeichnet. Auch wenn sie gezwungen werden, über invalidate() zu zeichnen, ändert sich nichts. Ich habe bereits versucht

this.setWillNotDraw(true); 

im Konstruktor zu setzen, die nicht geholfen haben. Jede Hilfe wäre willkommen.

Fragment

public static class CustomFragment extends Fragment { 

     private ListView list; 

     @Override 
     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
      final View rootView = inflater.inflate(R.layout.fragment, container, false); 
      list = (ListView)rootView.findViewById(R.id.fragment_list); 
      list.setAdapter(new CustomAdapter(getActivity(), R.layout.list_item, somevalues)); 
      return rootView; 
     } 
    } 

Benutzerdefinierte Ansicht

public class CustomView extends View { 

    public static final String TAG = "CustomView"; 

    public CustomView(Context context) { 
     super(context); 
     init(); 
    } 

    public CustomView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public CustomView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     init(); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     Log.d(TAG, "Measuring and storing dimensions"); 
    } 

    public void init() { 
     Log.d(TAG, "Initializing CustomView"); 
     this.setWillNotDraw(false); 
     invalidate(); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     Log.d(TAG, "OnDraw called"); 
    } 
} 

Individuelle Adapter

public static class CustomAdapter extends ArrayAdapter<String> { 
     private String[] values; 
     private Context context; 
     private int resource; 

     public CustomAdapter(Context context, int resource, String[] values) { 
      super(context, resource, values); 
      this.values = values; 
      this.context = context; 
      this.resource = resource; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      LayoutInflater inflater = (LayoutInflater)context.getSystemService(LAYOUT_INFLATER_SERVICE); 
      View rowView = inflater.inflate(resource, parent, false); 
      CustomView cView = (CustomView)rowView.findViewById(R.id.cview); 
      cView.setColors(values); 
      return rowView; 
     } 
    } 
+0

Haben Sie es gelöst? Ich würde mich freuen, wenn Sie einen Hinweis darauf haben. Ich muss wirklich über dieses Problem hinwegkommen. –

Antwort

0

Sie sollten setWil eingestellt lNotDraw (false) in Ihrer init-Methode.

Verwandte Themen