include標簽的作用是為了xml文件代碼的模塊化,詳細不再多提。主要是說說include標簽的監聽。
網上也有很多例子,不過大多是只寫了一個include標簽的監聽,如果需要實現多個include標簽的監聽怎么做呢?我至少是沒在百度搜出來,經過不斷的嘗試,修改,終於找到了方法,現在分享給大家,希望對大家有幫助。
先介紹一點,就是include標簽本身是不能設置監聽的,不論是android:onClick 或者 是對 include 綁定監聽器setOnClickListener,都不起作用(我的實驗結果是這樣,具體的沒有查文檔)。不論一個界面有多少個include,android系統只是對include標簽里面的子標簽監聽,但由於子標簽只有一個,所以無法區分監聽結果,其實解決辦法也很簡單,只需要單獨對include標簽的每個子標簽重新設置 id 即可。下面是代碼:
需要復寫的xml文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/sub_tv" android:layout_width="fill_parent" android:layout_height="45dp" android:clickable="true" android:onClick="onClick" android:background="#008800" android:layout_marginTop="10dp" android:gravity="center_vertical" android:paddingLeft="10dp" android:paddingRight="10dp" android:text="測試" android:textSize="17sp" android:textColor="#ffffff" /> </LinearLayout>
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <include android:id="@+id/item1" layout="@layout/sub_my_resume_item" /> <include android:id="@+id/item2" layout="@layout/sub_my_resume_item" /> <include android:id="@+id/item3" layout="@layout/sub_my_resume_item" /> <include android:id="@+id/item4" layout="@layout/sub_my_resume_item" /> </LinearLayout>
代碼:
package com.example.testincludeonclick; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends ActionBarActivity { private int[] id = { R.id.item1, R.id.item2, R.id.item3, R.id.item4 }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); for (int i = 0; i < id.length; i++) { View v = findViewById(id[i]); TextView tv = (TextView) v.findViewById(R.id.sub_tv); tv.setId(i); tv.setText("測試 " + (i + 1)); } } public void onClick(View v) { System.out.println("sub_id: " + v.getId()); switch (v.getId()) { case 0: Toast.makeText(getApplicationContext(), "測試1", 1).show(); break; case 1: Toast.makeText(getApplicationContext(), "測試2", 1).show(); break; case 2: Toast.makeText(getApplicationContext(), "測試3", 1).show(); break; case 3: Toast.makeText(getApplicationContext(), "測試4", 1).show(); break; default: break; } } }
運行結果: