2017-09-04 10 views
0

내 안드로이드 코드에서 나는 editingtext를 recyclerview에 넣고 TextWatcher를 사용하여 입력 한 값을 저장해야했습니다. 그 목적을 위해 여기에 제안 된대로 사용자 정의 TextWatcher를 사용했습니다.안드로이드 어떻게 재사용 클래스를 일반화 할 수 있습니다

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에서 데이터 모델에 글고 내용을 저장합니다.

내 상황은 MyCustomEditTextListener를 내부 클래스로 사용하고 있습니다. 그러나 여러 활동에서 동일한 사용 논리가 필요합니다. 어떻게 모든 재활용 어댑터에서 복제하지 않아도되도록 클래스를 다시 작성할 수 있습니까? 다음과 같은 뭔가 사용 afterTextChanged() 메소드

modelList.get (위치) .setQuantity (editable.toString());

여기서 modelList는 'Model'개체의 ArrayList입니다. 하지만 내 문제는 각 어댑터에서 Model 클래스가 다르다는 것입니다.

+1

[codereview.se] – Jens

답변

0

어떻게 든 당신이보기 만 홀더 클래스의 textwatcher을 구현할와 함께 사용할 수 있습니다. 그래서 BaseViewHolder 클래스를 쓸 수 있습니다. 이는 여러분의 필요에 따라 abstract이 될 수 있습니다. 자식 클래스에서 데이터를 가져 오려면 abstract 메서드를 선언하고 클래스를 abstract으로 정의 할 수 있습니다. 이 논리를 구현하려는 모든 ViewHolder 클래스의 부모 클래스로 BaseViewHolder 클래스를 만듭니다. 이것은 recyclerview에이 논리를 구현하려는 경우에 유용합니다.

둘 다 activitiesrecyclerview 수단이 논리를 구현하려면

는, 당신은 당신의 Activity의 상위 클래스가 될 것입니다 BaseActivity 클래스를 작성하기로되어있다. 이 수업은 abstract 일 수도 있고 아닐 수도 있다고 말했기 때문에 여러분의 필요에 따라 달라질 수 있습니다.

기본 클래스 광고에 코드를 삽입하십시오. 이렇게하면 재사용이 가능하며 한 곳에서 변경하면 다른 모든 클래스에서 영향을받습니다. 당신이 시나리오에 직면하지 않을 것이다 이런 식으로함으로써,

희망 acitivty A를에 있지만 활동 B에 헛소리를하고있다이 도움이됩니다 :)

질문의이 종류는 더 나은에 요청합니다
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