0
私は適切な答えについて既にStackoverflowを検索しましたが、何か助けになるものは見つかりませんでした。カスタムで呼び出されていないonDraw()ビュー
私はListViewを含むFragmentを持っています。このListViewは、カスタムビューの配列を表示する必要があります。 問題は、カスタムビューのonDraw()メソッドが呼び出されないことです。それらは初期化されますが描画されません。 invalidate()で描画するように強制しても、何も変わりません。 私はすでに助けにはならなかったコンストラクタに
this.setWillNotDraw(true);
を設定しようとしました。 ご協力いただければ幸いです。
断片
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;
}
}
カスタムビュー
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");
}
}
カスタム・アダプタ
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;
}
}
あなたはそれを解決しましたか?あなたがそれについてのヒントを持っているなら、私は感謝します。私は本当にこの問題を乗り越える必要があります。 –