2017-04-19 6 views
0

からクリックリスナーでいくつかの値を抽出し、私は外部クラス

public class CalculatorDialog extends Dialog implements OnClickListener { 
    TextView mView; 
    CalculatorListener delegate = null; 
    public CalculatorDialog (Context context, CalculatorListener delegate) { 
    this.context = context; 
    this.delegate = delegate; 
    } 
    public interface CalculatorListener extends OnClickListener { 
    @Override void onClick(View v); 
    } 
    @Override void onCreate(Bundle bundle) { 
    ... 
    mView = (TextView) findViewById(...); 
    findViewbyId(...Button...).setOnClickListener(delegate); 
    } 
    public String getViewText() { 
    mView.getText().toString(); 
    } 

が、私はボタンをクリックするために自分の行動を実装したいCalculatorDialogの新しいオブジェクトを作成するユニークなインターフェースを持つカスタムクラスを持っているが、私はしたいです表示されているテキストビューからStringを取得します。

CalculatorDialog dialogBox = new CalculatorDialog(context, new CalculatorDialog.CalculatorListener() {} 
    @Override 
    public void onClick(View v) { 
     String test = getViewText(); 
    } 
}); 

しかし、あなたと私はそれがそこからアクセスすることができないと思ってきたように:
は、だから私のMainActivityに私はこれをやろう。
ここのコードは私のプロジェクトで持っているものと1:1ではありませんが、私の要求を反映していると思います。また、StackOverflowに直接書きましたので、いくつかのコードのバグが含まれている可能性があります。
この機能にアクセスするにはどうすればよいですか?

+0

あなたCalculatorListenerを変更する必要があります? –

+0

Jesses answserを意味しますか? –

+0

ええ、それは変わってしまったようなものです。しかし、実際には 'View'パラメータは必要ありません。 –

答えて

1

あなたはあなただけの代わりに `OnClickListener`を中継する、あなたが望む` STRING`を返すため、あなたのインターフェイスメソッドを定義していないのはなぜ

public class CalculatorDialog extends Dialog implements OnClickListener { 
    TextView mView; 
    CalculatorListener delegate = null; 
    public CalculatorDialog (Context context, CalculatorListener delegate) { 
    this.context = context; 
    this.delegate = delegate; 
    } 
    public interface CalculatorListener{ 
    void onClick(View v, String text); 
    } 
    @Override void onCreate(Bundle bundle) { 
    ... 
    mView = (TextView) findViewById(...); 
    findViewbyId(...Button...).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      delegate.onClick(view, getViewText()); 
     }); 
    } 
    public String getViewText() { 
    mView.getText().toString(); 
    } 

CalculatorDialog dialogBox = new CalculatorDialog(context, new CalculatorDialog.CalculatorListener() {} 
    @Override 
    public void onClick(View v, String text) { 
     String test = text; 
    } 
+0

getViewText()はCalculatorDialogにあり、MainActivityではありません。しかし、 'double a = CalculatorDialog.this.getQuantity();'は、CalculatorDialogがクラスを囲んでいないと言っています。 –

+0

私は自分の答えを編集しました。 –

+0

ええ、これははるかに良く見えます。すぐにテストします –

関連する問題