2016-01-23 6 views
22

मुझे संवाद में डेटाबेसिंग को लागू करने में समस्या हो रही है। क्या यह संभव है?संवाद में डेटा बाध्यकारी का उपयोग कैसे करें?

नीचे मेरा एक्सएमएल है।

<data> 

    <variable 
     name="olaBooking" 
     type="com.example.myapp.viewmodels.ViewModel" /> 
</data> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.v7.widget.CardView 
     android:id="@+id/cv" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="15dp" 
     android:elevation="4dp" 
     android:padding="15dp"> 

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

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="@color/colorPrimary" 
       android:gravity="center" 
       android:padding="15dp" 
       android:text="OLA Cab Booked !" 
       android:textAppearance="@style/TextAppearance.AppCompat.Body1" /> 

      <View 
       android:layout_width="match_parent" 
       android:layout_height="2dp" 
       android:background="@color/colorPrimaryDark" /> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:gravity="start|center" 
       android:padding="15dp" 
       android:text="Car Details" /> 

      <View 
       android:layout_width="match_parent" 
       android:layout_height="2dp" 
       android:background="@color/colorPrimaryDark" /> 

      <TextView 
       android:id="@+id/driverName" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:padding="5dp" 
       android:text="@{olaBooking.driverName}" /> 

      <TextView 
       android:id="@+id/carModel" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:padding="5dp" 
       android:text="@{olaBooking.getCarName}" /> 

      <TextView 
       android:id="@+id/carNo" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:padding="5dp" 
       android:text="@{olaBooking.getCabNo}" /> 

      <TextView 
       android:id="@+id/eta" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:padding="5dp" 
       android:text="@{olaBooking.getEta}" /> 
     </LinearLayout> 
    </android.support.v7.widget.CardView> 
</LinearLayout> 

मैं एक संवाद में ऊपर लेआउट बाध्य करने के लिए चाहते हैं। यह कैसे संभव है? नीचे मेरी जावा कोड मैं करने की कोशिश की है, लेकिन यह काम नहीं कर रहा

 dialog.setContentView(R.layout.dialog_ola_booking_confirmed); 
    DialogOlaBookingConfirmedBinding binding = DataBindingUtil.inflate(
      LayoutInflater.from(dialog.getContext()), 
      R.layout.dialog_ola_booking_confirmed, 
      (ViewGroup) dialog.findViewById(R.id.cv), 
      false); 
    ViewModel viewModel = new ViewModel(this, event.olaBooking); 

उत्तर

26

यह बाध्यकारी अपने संवाद पर काम कर पाने के लिए आप यह पहली बार बढ़ और यह करने के लिए पास करना चाहिए एक संवाद में डेटा बाइंडिंग का उपयोग करने के लिए, पहले संभव है setContent इस तरह देखें।

DialogOlaBookingConfirmedBinding binding = DataBindingUtil.inflate(LayoutInflater.from(getContext()), R.layout. dialog_ola_booking_confirmed, null, false); 
setContentView(binding.getRoot()); 

तो फिर तुम ViewModel पारित कर सकते हैं:

binding.setViewModel(new ViewModel(this, event.olaBooking)); 

और अब आप इसे देख सकते हैं काम कर रहे।)

import android.app.Dialog; 
import android.databinding.DataBindingUtil; 
import android.os.Bundle; 
import android.support.annotation.NonNull; 
import android.support.annotation.Nullable; 
import android.support.v4.app.DialogFragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v7.app.AlertDialog; 
import android.view.LayoutInflater; 


public class MyDialog extends DialogFragment { 

    private static final String KEY_MY_INFO = "KEY_MY_INFO"; 

    private String myInfo; 

    public static MyDialog newInstance(String myInfo) { 
     MyDialog dialog = new MyDialog(); 
     Bundle bundle = new Bundle(); 
     bundle.putString(KEY_MY_INFO, myInfo); 
     dialog.setArguments(bundle); 
     return dialog; 
    } 

    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     myInfo = getArguments().getString(KEY_MY_INFO); 
    } 

    @NonNull 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     FragmentActivity activity = getActivity(); 

     MyInfoBinding binding = DataBindingUtil.inflate(LayoutInflater.from(getContext()), 
       R.layout.my_info_dialog_layout, null, false); 

     binding.setMyInfo(myInfo); 

     return new AlertDialog.Builder(activity, R.style.AppCompatAlertDialogStyle) 
       .setView(binding.getRoot()) 
       .create(); 
    } 

} 
+1

बाध्यकारी का उपयोग करते समय संवाद ठीक से दिखाना नहीं है और यह सामान्य तरीके से काम करता है –

10
mBinding = DataBindingUtil.inflate(LayoutInflater.from(getContext()), R.layout.dialog_select, null, false); 
    setContentView(mBinding.getRoot()); 
    SelectDialogBean data = new SelectDialogBean(); 
    mBinding.setData(data); 
+1

इस समाधान को लागू करते समय, मैंने देखा कि 'लेआउट इन्फ्लैटर.फॉम (getContext())' मुझे डेटा बाइंडिंग का उपयोग करने से पहले संवाद के अंदर एक अलग विषय देता है। मैं 'लेआउट इन्फ्लेटर' का उपयोग करके समाप्त हुआ, संवाद इस तरह प्रदान करता है: 'dialog.getLayoutInflater() 'या' LayoutInflater.from (dialog.getContext()) – splatte

7

यहाँ Databinding के साथ एक AlertDialog की एक पूरी उदाहरण है।

View view = LayoutInflater.from(getContext()).inflate(R.layout.dialog_delete_confirmation, null, false); 

mBinding = DialogDeleteConfirmationBinding.bind(view); 

mBinding.setViewModel(viewModel); 

builder.setView(view); 

builder.create(); 
+2

कभी-कभी लोग बिना किसी संदर्भ के अपने उत्तर पोस्ट करते हैं। तो कोई (उदाहरण के लिए मुझे) इस बात पर कोई संकेत नहीं हो सकता कि काम करने वाले कोड को कहां रखा जाए। एक पूर्ण समाधान पोस्ट करने के लिए धन्यवाद :)। –

4

आप getRoot बुला बिना ही कर सकते हैं (:

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

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