Puede crear un componente personalizado en su encabezado y definir 'onClick()' en él. Por ejemplo, cree una nueva clase Header
que extienda un RelativeLayout e infle su header.xml allí. Luego, en lugar de la etiqueta <include>
, usaría <com.example.app.Header android:id="@+id/header" ...
. Sin duplicación de código y el encabezado se vuelve totalmente reutilizable.
UPD: He aquí algunos ejemplos de código
header.xml:
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView android:id="@+id/logo" .../>
<TextView android:id="@+id/label" .../>
<Button android:id="@+id/login" .../>
</merge>
activity_with_header.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" ...>
<com.example.app.Header android:id="@+id/header" .../>
<!-- Other views -->
</RelativeLayout>
Header.java:
public class Header extends RelativeLayout {
public static final String TAG = Header.class.getSimpleName();
protected ImageView logo;
private TextView label;
private Button loginButton;
public Header(Context context) {
super(context);
}
public Header(Context context, AttributeSet attrs) {
super(context, attrs);
}
public Header(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void initHeader() {
inflateHeader();
}
private void inflateHeader() {
LayoutInflater inflater = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.header, this);
logo = (ImageView) findViewById(R.id.logo);
label = (TextView) findViewById(R.id.label);
loginButton = (Button) findViewById(R.id.login);
}
ActivityWithHeader.java :
public class ActivityWithHeader extends Activity {
private View mCreate;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_with_header);
Header header = (Header) findViewById(R.id.header);
header.initHeader();
// and so on
}
}
En este ejemplo, Header.initHeader() se puede mover dentro de constructor de Cabecera, pero en general este método proporciona una buena manera de pasar en algunos oyentes útiles. Espero que esto ayude
Eso suena bien. ¿Pero cómo hago eso? – rlc
He agregado un ejemplo. – Ash
no puedo ver el pie de página en absoluto. ¿Podemos llamar al método 'getSystemService()' de una actividad en la clase de no actividad? Intenté con 'getContext()' pero no muestra nada. –