0

ハンドラでTextViewの量を増減させようとしていますが、いつも同じエラーが発生して、期待した結果が得られません。アンドロイドのデータバインディングでインクリメントハンドラとデクリメントハンドラをバインドするボタン

エラー: ':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> 

パブリッククラスフラグメントは、私は、問題があなたのインクリメント&デクリメント方法であると思い断片{

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)); 
    } 

} 

}

答えて

0

を拡張します。これらのメソッドのパラメータをオーバーロードすることはできません。

あなたが好き記述する必要があります。

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)); 
} 

}

とXMLで:

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

は、より多くのリンクを参照してください。DataBinding

+0

私はそれをしなかったが、そのもありません私は別の質問で私に言及された解決策からこれをやっています。見てくださいhttp://stackoverflow.c om/questions/37066497/layout-binding-integer-value-limit-0から10-in-android-with-databinding –

+0

あなたのプロジェクトをきれいにしてみましたか?いくつかのデータバインディングエラーは理由なしで表示され、クリーニングプロジェクトによって自動的に修正されます。 – Sayem

+0

キャッシュを何回もクリーニングしても無効にしますが、何も起こりません –

関連する問題