2016-05-07 5 views
3

私のクラスはLinearLayoutを拡張し、レイアウトを拡張するためにDataBindingを使用します。ビューのビューが正しくないという例外がスローされます。 。Android DataBinding - ビュータグが正しく表示されない:null

これは私のコードです:

public class DietListView extends LinearLayout { 
    private LayoutDietListViewBinding mBinding; 
    private List<?> mDietList = new LinkedList<>(); 
    private LayoutInflater mInflater; 

    public DietListView(Context context) { 
     this(context,null); 
    } 

    public DietListView(Context context, AttributeSet attrs) { 
     this(context, attrs,0); 
    } 

    public DietListView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     initView(context); 
    } 

    private void initView(Context context) { 
     mInflater = LayoutInflater.from(context); 
     mBinding = DataBindingUtil.inflate(mInflater, R.layout.layout_diet_list_view, null, false); 
     addView(mBinding.getRoot()); 

    } 

}

レイアウトファイルは次のとおりです。

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:bind="http://schemas.android.com/apk/res-auto"> 
<data> 

</data> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     ..... 

    </LinearLayout> 
</layout> 
+0

ここに正確なエラーがあり、同様の質問があります。 http://stackoverflow.com/questions/33116688/android-view-tag-isnt-correct-on-viewnull-cursoradapter-and-databinding –

+0

私はそれを見ました。それは動作しません。カスタムビュークラスでdataBindingを使用していますが、わかりません。 – OstAlex

+0

これを再現することはできません。 Androidのgradleプラグインのどのバージョンを使用していますか?私はAndroid Studio 2.1とそれに付属のプラグインでテストしました。バインディングされていないレイアウトファイルを展開している可能性もあります。 –

答えて

3

これに関連するバグがあります。インフレーション中にデータバインディングを行うと、データバインディングフレームワークが混乱します。データバインディングフレームワークが完了してから動作するかどうかを確認するまで、インフレーションを遅らせてください。このバグはandroid gradle plugin 2.2(Android Studio 2.2)で修正する必要がありますが、I/O 2016プレビューでは利用できません。

https://code.google.com/p/android/issues/detail?id=204890

+3

私は今この問題に直面しています。実行時には動作しますが、プレビューでは動作しません。これを今修正するにはどうしたらいいですか? – FireDragonMule

+0

年が過ぎ、Android Studio 3.0.1でこの問題に直面しています。私の場合、私はデータバインディングを使用してカスタムビューを持っています。これはデータバインディングされたフラグメントで複数回使用されます。私はfind-by-idの旧式の方法を使ってビューからバインディングを削除し、この時点でフラグメントのみのバインディングを使用し続けると思います。 – Ambran

1

は、これはおそらく、それを(それはより多くの問題を回避するようなものだ)を行うための最善の方法ではありませんが、私はisInEditMode()メソッドを追加してやっていることは、このように、すぐに私のレイアウトと終了を膨らま:

LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
if(isInEditMode()){ 
      inflater.inflate(R.layout.your_layout, this); 
      return; 
     } 

この後、プレビュー機能を失うことなくビューをバインドできます。

関連する問題