2015-10-20 6 views
6

मैं Android databinding library के साथ खेल रहा हूं और मैं इसे शामिल लेआउट के साथ उपयोग करने का प्रयास कर रहा हूं।एंड्रॉइड डाटाबेसिंग के साथ शामिल दृश्य कैसे प्राप्त करें?

कोड मैं इस तरह है:

activity_main.xml

<layout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:bind="http://schemas.android.com/apk/res-auto"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:id = "@+id/linearLayout"> 

    <include 
     layout="@layout/view" /> 
    </LinearLayout> 
</layout> 

view.xml

<View xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:id = "@+id/myView"> 
</View> 

MainActivity.java

public MainActivity extends AppCompatActivity{ 

    private ActivityMainBinding mBinding; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main); 

    LinearLayout layout = mBinding.linearLayout; // this field is visible 
    View myView = mBinding.myView // THIS FIELD IS NOT VISIBLE 
    } 


} 

जैसा कि मैंने लिखा है टिप्पणियों में वी iew myView जिसे "शामिल" लेआउट में घोषित किया गया है दिखाई नहीं दे रहा है। अगर मैं view.xml में वास्तविक कोड को प्रतिस्थापित करता हूं तो mBinding.myView दिखाई देता है, तो कारण तब शामिल होता है।

आधिकारिक दस्तावेज राज्यों ही नहीं

"डेटा बाइंडिंग का समर्थन नहीं करता किसी मर्ज तत्व का एक सीधा बच्चे के रूप में शामिल हैं।" लेकिन मेरे मामले में देखें LinearLayout का एक बच्चा है, यह प्रत्यक्ष बच्चा नहीं है ..

कोई संकेत?

View myView = mBinding.included; 

अपने शामिल लेआउट एक बाध्यकारी लेआउट, को शामिल किया जाता है तो हो जाएगा:

<include android:id="@+id/included" 
    layout="@layout/view" /> 

अब आप दृश्य शामिल पहुँच सकते हैं:

उत्तर

14

आप आईडी प्रदान कराने की को include स्टेटमेंट की जरूरत है एक उत्पन्न बाध्यकारी। उदाहरण के लिए, यदि view.xml है:

<layout xmlns:android="http://schemas.android.com/apk/res/android"> 
    <View 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@{@android:color/black}" 
     android:id="@+id/myView"/> 
</layout> 

तो लेआउट क्षेत्र एक ViewBinding वर्ग होगा:

View myView = mBinding.included.myView; 
+0

मैं के लिए लेआउट के लिए एक ही है लेकिन एक ही नाम के साथ दो लेआउट के लिए, यह कैसे कर सकते टैबलेट केस मेरा मतलब है, जब मेरे पास 'लेआउट/लेआउट.एक्सएमएल' और' लेआउट-sw600dp/layout.xml' नामक दो लेआउट हैं, लेकिन दूसरे में टुकड़े के लिए कंटेनर 'फ्रेमलाउट' है, यह अंतिम बाध्यकारी जेनरेट क्लास में दिखाई नहीं देता है। अग्रिम धन्यवाद। – epool

+1

यदि आपके पास एक लेआउट में कोई दृश्य है, लेकिन दोनों नहीं, तो आपको कक्षा में दृश्य देखना चाहिए, लेकिन जब एक लेआउट बाध्य होता है तो यह शून्य हो जाएगा। उन गुणों को आईडी देना सुनिश्चित करें जिन्हें आप गुणों के रूप में रखना चाहते हैं। –

संबंधित मुद्दे