2

복합 구성 요소를 작성하고 사용자 지정 수신기를 추가하여 반응했습니다.Compound 구성 요소 사용자 지정 수신기

xml 파일을 사용하는 복합 구성 요소의 클래스 내부.

내 인터페이스를 가지고
public class VerticalCounterBlock extends LinearLayout { 

    public interface VerticalCounterBlockListener { 
     public void onCountChanged(int newCount); 
    } 

    private VerticalCounterBlockListener mVerticalCounterBlockListener = null; 

    public void setVerticalCounterBlockListener(VerticalCounterBlockListener listener){ 
     mVerticalCounterBlockListener = listener; 
    } 

    // ... Other functions 
} 

, 나는 청취자 있고 난 세터 있고 난 내가 화합물의 구성 요소에있는 버튼이 같은 청취자 참여. 나는 그 토스트가 표시되지 않으며 함수 호출을 참여 않습니다 내 주요 활동

m20_vcb = (VerticalCounterBlock) findViewById(R.id.vcb_m20); 
m20_vcb.setVerticalCounterBlockListener(new VerticalCounterBlock.VerticalCounterBlockListener() { 
    @Override 
    public void onCountChanged(int newCount) { 
     increasePreachCountTotal(); 
     Toast.makeText(CounterActivity.this, String.format("%1$d", newCount), Toast.LENGTH_SHORT).show(); 
    } 
}); 

에서

addBtn = (Button)findViewById(R.id.btn_addcount); 
addBtn.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     count++; 
     counttv.setText(String.format("%1$d", count)); 
     Toast.makeText(getContext(), "VCB", Toast.LENGTH_SHORT).show(); 
     if(mVerticalCounterBlockListener != null) { 
      mVerticalCounterBlockListener.onCountChanged(count); 
     } 
    } 
}); 

을 테스트 할 때 내가 거기 보여주는 그 토스트를 볼 수 있습니다. 내가 뭘 놓치고 있니?

답변

0

여기에서는 주로 현재 형식을 재구성하는 몇 가지 개선 범위를 제안 할 수 있습니다.

인터페이스를 내부 클래스로 유지하지 않도록합니다. 그래서 여기 VerticalCounterBlockListener.java

public interface VerticalCounterBlockListener { 
    public void onCountChanged(int newCount); 
} 

지금이 interface을 구현의 당신의 당신은 예외를 만들 수있는 addBtn 클릭 리스너에서 Toast을 제거하는 것이 좋습니다 MainActivity

public class MainActivity implements VerticalCounterBlockListener { 

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

     m20_vcb = (VerticalCounterBlock) findViewById(R.id.vcb_m20); 
     m20_vcb.setVerticalCounterBlockListener(this); 
    } 

    // ... Other methods 

    // Override the onCountChanged function. 
    @Override 
    public void onCountChanged(int newCount) { 
     increasePreachCountTotal(); 
     Toast.makeText(CounterActivity.this, String.format("%1$d", newCount), Toast.LENGTH_SHORT).show(); 
    } 
} 

.

addBtn = (Button)findViewById(R.id.btn_addcount); 
addBtn.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     count++; 
     counttv.setText(String.format("%1$d", count)); 

     if(mVerticalCounterBlockListener != null) { 
      mVerticalCounterBlockListener.onCountChanged(count); 
     } 
    } 
}); 
+0

좋습니다. 첫 번째 시도하고 별도의 인터페이스 클래스를 사용했습니다. 그게 도움이되지 않았으므로 나는 나의 정신과 조직의 선호를 위해 뒤로 물러났다. 제안 2/3은 청취자에게 문제를 일으킬 것입니까? 내 디버거가 고장 나서 계속 연결을 끊었 기 때문에 토스트 만 사용했습니다. –

+0

코드 세그먼트 2는 '활동'내에 공개 청취자를 유지하는 것을 보여줍니다. 너도 그걸 시도 했니? –

+0

나는 그것을 시도했으나 효과가 없었다. 작동을 방해하는 선형 레이아웃이 있습니까? –

0

내 시스템에 이상이있었습니다. 내가 uninstaklled 응용 프로그램과 컴퓨터를 다시 시작하고 예상대로 일했습니다.