[英]“Header” Views and buttons: how do I attach listeners to Buttons in a “header” that does not have its own Activity?
我在這里提到了這個問題,克里斯托弗在這里給出了答案,但我並不是真的理解它,所以我認為是時候把它作為一個真正的問題,而不僅僅是“跟進”=)
就目前而言,我正在編寫的應用程序有4個不同的屏幕:
可以使用放置在頂部的“標題”視圖來導航這些屏幕。 然后標題有4個不同的按鈕:
+--------------------+
| menu with buttons |
+--------------------+
| |
| |
| |
| C O N T E N T |
| |
| |
| |
+--------------------+
標題只是一個帶有幾個按鈕的XML文件(header.xml)。 該header.xml是使用include-markup包含在Layouts中的。 例如,main.xml包含以下行:
<include layout="@layout/header"></include>
標題顯示正常,但問題是 - 為標題中的按鈕附加OnClickListeners的正確方法是什么?
克里斯托弗指出你可以創建一個Activity類並在那里做鈎子,如下所示:
public class BaseActivity extends Activity {
protected View.OnClickListener mButtonListener;
protected void setupHeaderButtons() {
findViewById(R.id.header_btn_1).setOnClickListener(mButtonListener);
// ...
findViewById(R.id.header_btn_n).setOnClickListener(mButtonListener);
}
}
public class FirstActivity extends BaseActivity {
@Override
public void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.first_activity);
// This needs to be done *after* the View has been inflated
setupHeaderButtons();
}
}
首先,我不能讓它工作,因為該方法setupHeaderButtons
不是來自FirstActivity訪問。 其次,這是正確的方法嗎?
setupHeaderButtons()
方法protected
因此只能由extend
該基類的類訪問,在本例中為BaseActivity
。
您確定您的FirstActivity
正在擴展BaseActivity
嗎?
我更喜歡這樣,所以你不必記住(並且可能忘記)為每個派生的Activity調用setupHeaderButtons。 順便說一句,設置U pHeaderButtons這是一個更好的名字。
public class BaseActivity extends Activity {
protected View.OnClickListener mButtonListener;
@Override
public void setContentView(int layoutResID) {
super.setContentView(layoutResID);
setupHeaderButtons();
}
protected void setupHeaderButtons() {
findViewById(R.id.header_btn_1).setOnClickListener(mButtonListener);
// ...
findViewById(R.id.header_btn_n).setOnClickListener(mButtonListener);
}
}
public class FirstActivity extends BaseActivity {
@Override
public void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.first_activity);
}
}
我個人認為你不應該過分復雜化。 必須調用setupHeaderButtons應該沒問題,特別是如果你只有一些活動。
如果您使用的是標准啟動模式,則會重新啟動該活動。 如果您有興趣了解啟動模式,請查看應用基礎知識 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.