標籤:new super activity lin over 改變 null create listen
1.layout_common.xml
複用的布局檔案
<?xml version="1.0" encoding="utf-8"?><!-- 複用的布局檔案 --><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" /> <Button android:id="@+id/common_button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按鈕1" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" /> <Button android:id="@+id/common_button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按鈕2" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" /> <Button android:id="@+id/common_button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按鈕3" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" /></LinearLayout>
2.layout_main.xml
主布局檔案 ,在這裡引用複用的布局檔案
<?xml version="1.0" encoding="utf-8"?><!-- 主布局檔案 --><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <RelativeLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_margin="16dp" android:layout_weight="1" > </RelativeLayout> <!-- 在布局檔案中引用複用的布局檔案 --> <include layout="@layout/layout_common" /></LinearLayout>
3.CommonView.java
複用布局檔案執行個體化。單獨封裝,介面回調。 避免重複寫布局檔案,避免重複執行個體化控制項,避免重複設定監聽方法
package com.example.mytestapp;import android.app.Activity;import android.content.Context;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;/** * 複用布局檔案執行個體化 */public class CommonView implements OnClickListener { // 介面 public interface OnCommonViewClick { public void onButton1Click(View v); public void onButton2Click(View v); public void onButton3Click(View v); } public void setListener(OnCommonViewClick listener) { this.listener = listener; } Context mContext; OnCommonViewClick listener; public CommonView(Context context) { this.mContext = context; } public Button button1, button2, button3; public CommonView init() { button1 = (Button) ((Activity) mContext).findViewById(R.id.common_button1); button2 = (Button) ((Activity) mContext).findViewById(R.id.common_button2); button3 = (Button) ((Activity) mContext).findViewById(R.id.common_button3); button1.setOnClickListener(this); button2.setOnClickListener(this); button3.setOnClickListener(this); return this; } @Override public void onClick(View v) { if (listener == null) return; switch (v.getId()) { case R.id.common_button1: listener.onButton1Click(v); break; case R.id.common_button2: listener.onButton2Click(v); break; case R.id.common_button3: listener.onButton3Click(v); break; default: break; } }}
4.MainActivity.java
主介面執行個體化
package com.example.mytestapp;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Toast;/* * 問題: * 1.如何用代碼改變控制項的文字或顏色? */public class MainActivity extends Activity implements CommonView.OnCommonViewClick { int clickTimes = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_main); // 在這裡執行個體化布局檔案, 並實現監聽介面方法 // 只需要一行代碼就可以直接完成複用代碼塊的執行個體化 new CommonView(this).init().setListener(this); } @Override public void onButton1Click(View v) { clickTimes++; // 在這裡實現對應點擊事件的方法 Toast.makeText(this, "你點擊了button" + clickTimes + "次", Toast.LENGTH_SHORT).show(); } @Override public void onButton2Click(View v) { // 在這裡實現對應點擊事件的方法 } @Override public void onButton3Click(View v) { // 在這裡實現對應點擊事件的方法 }}
Android 多個介面複用一個布局檔案