2017-04-19 49 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的新對象我想要實現我自己的點擊按鈕操作的唯一接口的自定義類,但我想從可見的文本視圖中獲取一些字符串。
所以在我的MainActivity我嘗試這樣做:

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

但你和我還以爲它不能從那裏訪問。
這裏的代碼與我在項目中的代碼不是1:1,但我認爲它代表了我的需求。我也直接在StackOverflow上寫了它,所以它可能包含一些代碼錯誤。
如何訪問此功能?

+0

你爲什麼不只是定義接口的方法來傳遞迴你想要的'String',而不是中繼'OnClickListener' ? –

+0

你是說Jesses anwser? –

+0

是的,就是這樣,現在他們已經改變了它。不過,你可能並不需要'View'參數。 –

回答

1

你應該改變你的CalculatorListener

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

是的,這看起來好多了。將盡快進行測試 –