0

Ich versuche, die Erhöhung und Verringerung der Menge in einem TextView mit Handlern zu implementieren, aber immer wirft es den gleichen Fehler bitte helfen Sie mir zu verstehen, wo ich fehlen, um das erwartete Ergebnis zu erhalten .Binding Buttons mit Increment und Dekrement Handler in android Databinding

Fehler: Ausführung fehlgeschlagen für Task ': app: compileDebugJavaWithJavac'.

java.lang.RuntimeException: Found data binding errors. ****/ data binding error ****msg:Identifiers must have user defined types from the XML file. view is missing it file:C:\Users\Tushar Rai\Desktop\Demo\Demo\app\src\main\res\layout\fragment_list.xml ****\ data binding error ****

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

<data> 

    <variable 
     name="quantity" 
     type="int"/> 

    <variable 
     name="Handlers" 
     type="com.demo.www.demo.ui.Fragment.Handlers"/> 

    <import type="android.view.View"/> 
</data> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:layout_alignParentEnd="true" 
     android:paddingTop="16dp" 
     android:paddingBottom="16dp"> 


     <Button 
      style="?android:attr/buttonStyleSmall" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/decrease" 
      android:onClick="@{Handlers.decrement(view, 0)}" /> 

     <TextView 
      android:layout_width="32dp" 
      android:layout_height="wrap_content" 
      app:quantity="@{quantity}" 
      android:textAlignment="center" /> 

     <Button 
      style="?android:attr/buttonStyleSmall" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/increase" 
      android:onClick="@{Handlers.increment(view, 10)}" /> 

    </LinearLayout> 

public class Fragment erstreckt Fragment {

FirebaseRecyclerAdapter adapter; 
Firebase mFirebaseRef = new Firebase("https://demo.firebaseio.com/").child("list"); 

public Fragment() { 
    // Required empty public constructor 
} 

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

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    final View rootView = inflater.inflate(R.layout.recycler_view, container, false); 
    final RecyclerView recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view); 

    adapter = new FirebaseRecyclerAdapter<List, ViewHolder>(List.class, R.layout.fragment_list, 
      ViewHolder.class, mFirebaseRef) { 
     @Override 
     protected void populateViewHolder(ViewHolder viewHolder, List list, int i) { 

      FragmentBinding binding = viewHolder.getBinding(); 
      binding.setList(list); 
      Handlers handlers = new Handlers(); 
      binding.setHandlers(handlers); 


     } 
    }; 
    recyclerView.setAdapter(adapter); 
    recyclerView.setHasFixedSize(true); 
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
    recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), null)); 
    return rootView; 
} 

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

    public FragmentBinding binding; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     binding = DataBindingUtil.bind(itemView); 
     itemView.setOnClickListener(this); 
    } 

    public FragmentBinding getBinding() { 
     return binding; 
    } 
    @Override 
    public void onClick(View v) { 


    } 
} 
@BindingAdapter("imageUrl") 
public static void setImage(ImageView imageView, String imageUrl) { 
    Picasso.with(imageView.getContext()).load(imageUrl).into(imageView); 
} 
@BindingAdapter("quantity") 
public static void setQuantityText(TextView view, int quantity) { 
    view.setText(String.valueOf(quantity)); 
} 
public class Handlers { 

    public void decrement(View view, int min) { 
     FragmentBinding binding = DataBindingUtil.findBinding(view); 
     binding.setQuantity(Math.min(min, binding.getQuantity() - 1)); 
    } 
    public void increment(View view, int max) { 
     FragmentBinding binding = DataBindingUtil.findBinding(view); 
     binding.setQuantity(Math.max(max, binding.getQuantity() + 1)); 
    } 

} 

}

Antwort

0

Ich denke Problem in & Dekrement Methoden Ihrer Zuwachses ist. Sie können diese Methodenparameter nicht überladen.

Sie müssen wie schreiben:

public class Handlers { 

public void decrement(View view) { 
    FragmentBinding binding = DataBindingUtil.findBinding(view); 
    binding.setQuantity(Math.min(min, binding.getQuantity() - 1)); 
} 
public void increment(View view) { 
    FragmentBinding binding = DataBindingUtil.findBinding(view); 
    binding.setQuantity(Math.max(max, binding.getQuantity() + 1)); 
} 

}

Und in xml: für mehr

android:onClick="@{Handlers.increment}" 

siehe Link: DataBinding

+0

ich es tat, aber es ist auch nicht Arbeiten, ich mache dies aus einer Lösung, die mir auf meine andere Frage verwiesen, schauen Sie http: //stackoverflow.c om/questions/37066497/layout-binding-integer-wert-limit-from-0-to-10-in-android-mit-datenbindung –

+0

haben Sie es versucht, indem Sie Ihr Projekt gereinigt? Einige DataBinding-Fehler werden ohne Grund angezeigt, was durch das Reinigungsprojekt – Sayem

+0

automatisch behoben wird. Ja, die Caches wurden auch mehrmals bereinigt und sogar ungültig gemacht, aber nichts passiert –