2017-09-14 12 views
0

私の機能は、私のすべてのバインディングアクティビティに共通するようにしようとしています。私はあなたにこれについていくつかの提案を聞きたいと思います。メソッド内の汎用オブジェクトのフォーム

のように現時点では私のコードが見えます: - :

public static void stateDialog(Context context, String[] stateList, final ViewDataBinding<T> binding) { 
     } 

stateDialogは私のアラートクラスの内部で作成された関数であると私はちょうどこの機能になりたい

public static void stateDialog(Context context, String[] stateList, final FragmentSendAlertBinding binding) { 
    mStateDialog = new Dialog(context); 
    mStateDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
    mStateDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    mStateDialog.show(); 
    mStateDialog.setCancelable(false); 
    mStateDialog.setContentView(R.layout.dialog_select_state); 
    CardView cvState = (CardView) mStateDialog.findViewById(R.id.cv_state); 
    final ListView states = (ListView) mStateDialog.findViewById(R.id.countryList); 
    final TextView tvCancel = (TextView) mStateDialog.findViewById(R.id.tv_cancel); 
    final Animation myAnim = AnimationUtils.loadAnimation(context, R.anim.bounce); 
    MyBounceInterpolator interpolator = new MyBounceInterpolator(0.2, 20); 
    myAnim.setInterpolator(interpolator); 
    cvState.startAnimation(myAnim); 
    ArrayAdapter<String> itemList = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, stateList); 
    states.setAdapter(itemList); 
    states.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 
      binding.tvState.setText((String) arg0.getItemAtPosition(position)); 
      mStateDialog.dismiss(); 
     } 
    }); 
    tvCancel.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mStateDialog.dismiss(); 
     } 
    }); 

} 

は私が好きなものを使用することができますすべての私のBindingアクティビティに共通です。私はそれぞれのバインディングアクティビティに対して別々の関数を作成したくありません。私のこの機能だけではなく、FragmentSendAlertBinding

この5月はあなたに愚かなようだが、私はちょうどそれを知りたいためにすべての私の結合活性のために使用することができるように

これを達成するためにどのような方法があります。

おかげ&よろしく 私はちょうど任意の助けをいただければ幸いです

をしようと、前の一般的なクラスを作成したことがありません!!!。

答えて

1

の代わりに、それは一般的な私はその

interface StateDialogListener{ 
    public void onValueSelect(String value); 
} 
ためのインタフェースを作成することを提案します作るように書くことができます。

あなたの方法wilリットルルック

public static void stateDialog(Context context, String[] stateList, final StateDialogListener listener) { 
    mStateDialog = new Dialog(context); 
    mStateDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
    mStateDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    mStateDialog.show(); 
    mStateDialog.setCancelable(false); 
    mStateDialog.setContentView(R.layout.dialog_select_state); 
    CardView cvState = (CardView) mStateDialog.findViewById(R.id.cv_state); 
    final ListView states = (ListView) mStateDialog.findViewById(R.id.countryList); 
    final TextView tvCancel = (TextView) mStateDialog.findViewById(R.id.tv_cancel); 
    final Animation myAnim = AnimationUtils.loadAnimation(context, R.anim.bounce); 
    MyBounceInterpolator interpolator = new MyBounceInterpolator(0.2, 20); 
    myAnim.setInterpolator(interpolator); 
    cvState.startAnimation(myAnim); 
    ArrayAdapter<String> itemList = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, stateList); 
    states.setAdapter(itemList); 
    states.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 
      listener.onValueSelect((String) arg0.getItemAtPosition(position)); 
      //binding.tvState.setText((String) arg0.getItemAtPosition(position)); 
      mStateDialog.dismiss(); 
     } 
    }); 
    tvCancel.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mStateDialog.dismiss(); 
     } 
    }); 

} 

そして最後に、あなたが

stateDialog(this,<your stateList>, new StateDialogListener(){ 
    @Override 
    public void onValueSelect(String value){ 
     binding.tvState.setText(value); 
    } 
}); 
+0

インタフェースメソッドでバインディングオブジェクトを送信できますか? – Siddharth

+0

私はあなたがそれを送ることができると思うが、私はそれについてはわからない –

0

バインディングアクティビティの親クラスを作成します。クラスには、その子クラスのオブジェクトから使用するすべてのメソッドが含まれている必要があります。その後、親バインディングクラスを拡張する他の子クラスを作成します。

class ParentBinding{ 

    public void method1(); 

    public void method2(); 

    public void method3(); 

} 

Cusomバインディングクラス

class BindingClass1 extends ParentBinding{ 

@override 
public void method1(){ 
    super(); 
} 

@override 
public void method1(){ 
    super(); 
} 

@override 
public void method1(){ 
    super(); 
} 

} 

次に、あなたの方法は

public static void stateDialog(Context context, String[] stateList, final ParentBinding binding) { 
+0

それを呼び出している場所から@Nawarajこんにちは、私はあなたが私のポイントを取得していないと思いますが、もう一度質問をお読みください。 – Siddharth

関連する問題