2

私は複合コンポーネントを書き、カスタムリスナーを追加して反応させました。複合コンポーネントのカスタムリスナー

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

だ今すぐあなたの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クリックリスナーからToastを削除することを検討可能性がある。このinterfaceを実装しています。

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は、あなたの 'Activity'の中にパブリックリスナーを保持することを示しています。あなたもそれを試しましたか? –

+0

私はそれを試みましたが、うまくいきませんでした。動作を妨げる線形レイアウトのものがありますか? –

0

これは私のシステムに問題がありました。私はuninstaklledアプリと再起動したコンピュータと期待どおりに働いた。

関連する問題