簡體   English   中英

“標題”視圖和按鈕:如何在沒有自己的Activity的“標題”中將監聽器附加到按鈕?

[英]“Header” Views and buttons: how do I attach listeners to Buttons in a “header” that does not have its own Activity?

我在這里提到了這個問題,克里斯托弗在這里給出了答案,但我並不是真的理解它,所以我認為是時候把它作為一個真正的問題,而不僅僅是“跟進”=)


就目前而言,我正在編寫的應用程序有4個不同的屏幕:

  1. 屏幕1 - 節點列表(主屏幕)
  2. 屏幕2 - 選項菜單,帶有按鈕的tableLayout
  3. 屏幕3 - 導航
  4. 屏幕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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM