2017-09-04 19 views
0

私のアンドロイドコードでは、私はedittextをrecyclerviewに置き、TextWatcherを使って入力した値を保存する必要がありました。その目的のために私はカスタマイズされたTextWatcherをここで提案するように使用しました。Android再利用のためにクラスを一般化するにはどうすればいいですか

private class MyCustomEditTextListener implements TextWatcher {  
int position; 
public void updatePosition(int position) 
{ 
    this.position=position; 
} 
@Override 
public void beforeTextChanged(CharSequence charSequence, int i, int i2, 
int i3) {} 

@Override 
public void onTextChanged(CharSequence charSequence, int i, int i2, 
int i3) {} 

@Override 
public void afterTextChanged(Editable editable) {}} 

updatePositionは... onBindViewHolderから呼び出されると、私はafterTextChangedからデータモデルへのEditTextの内容を保存しています。

今私の状況は、MyCustomEditTextListenerを内部クラスとして使用しています。しかし、複数のアクティビティで同じ使用ロジックが必要です。どのように私はすべてのリサイクラーのアダプタでそれを複製する必要はありませんクラスを書き換えることができます。以下のような何かを使用afterTextChanged()メソッドで

modelList.get(位置).setQuantity(editable.toString())。

ここで、modelListは 'Model'オブジェクトのArrayListです。しかし、私の問題は、各アダプタでModelクラスが異なることになります。

+1

[codereview.se] – Jens

答えて

0

どういうわけか、あなただけのビューホルダークラスでtextwatcherを実装しますと、それを使用することができます。だから、あなたが必要とする場合はabstractの子クラスからデータをフェッチしたい場合はabstractメソッドを宣言し、クラスをabstractとすることができますBaseViewHolderクラスを書くことができます。このロジックを実装するすべてのViewHolderクラスの親クラスとしてBaseViewHolderクラスを作成します。これは、recyclerviewにこのロジックを実装する場合に役立ちます。

あなたは両方activitiesrecyclerview手段でこのロジックを実装したい場合、あなたはあなたのActivityの親クラスとなりますBaseActivityクラスを書くことになっています。私はこのクラスがabstractになることができる、またはできないと言ったので、それはあなたの必要性までです。

コードをBaseクラスの広告に入れてアクセスします。このようにして再利用性を達成することができ、単一の場所で変更すると、それは他のすべてのクラスで影響を受けます。あなたがシナリオに直面することはありません。このところで、それは

希望acitivty Aではなく、活動BにFIEを働いている、これは便利です:)

質問のこの種は、より良いに頼まれ
0

あなたは、静的な関数を記述し、あなたのTextWatcher

public static TextWatcher getTextWatcher(){ 
    return new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {} 

     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i2, 
            int i3) {} 

     @Override 
     public void afterTextChanged(Editable editable) {} 
    }; 

} 

を返すそして、あなたはYourClassName.getTextWatcher()

+0

これは私が何を意味するのではない。私は自分の問題を明確にして私の質問を更新しました。 – Deepak