2016-05-12 9 views
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; 
     } 
    } 
+0

あなたはそれを解決しましたか?あなたがそれについてのヒントを持っているなら、私は感謝します。私は本当にこの問題を乗り越える必要があります。 –

答えて

0

あなたはsetWilを設定する必要がありますinitメソッドのlNotDraw(false)。

関連する問題