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;
}
}
Haben Sie es gelöst? Ich würde mich freuen, wenn Sie einen Hinweis darauf haben. Ich muss wirklich über dieses Problem hinwegkommen. –