Android - как получить доступ к кнопкам внутри, включая макет
Я создал header.xml и включил таким образом в Main.xml и Menu.xml. В header.xml у меня есть кнопка.
Header.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<ImageView
android:layout_width="150dp"
android:layout_height="100dp"
android:src="@drawable/logo"
android:id="@+id/header"
android:paddingTop="10px"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/insideButtons">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Main Menu"
android:gravity="right"
android:layout_marginRight="50px"
android:id="@+id/mainMenu"
android:textColor="#604811"
android:textSize="20dp"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="About University"
android:gravity="right"
android:layout_marginRight="50px"
android:id="@+id/about"
android:textColor="#604811"
/>
</LinearLayout>
Я хочу знать, что, как я получаю доступ к этой кнопке из основной деятельности и деятельности меню. Я использую следующий код, но он не работает.
TextView btn;
public class Header extends AppCompatActivity {
TextView home;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setContentView(R.layout.header);
home = (TextView) findViewById(R.id.mainMenu);
home.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(),Menu.class);
startActivity(i);
}
});
}}
3 ответа
Решение 1
Добавьте это в свой Main.xml
<include
layout="@layout/header.xml"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Используйте следующий код в Main.java для доступа к нему тем же способом и посмотрите, работает ли он.
TextView home;
home= (TextView) findViewById(R.id.mainMenu);
home.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(),Menu.class);
startActivity(i);
}
});
То, что я сделал выше, позволит вам получить доступ ко всем элементам header.xml из Main.java, напрямую ссылаясь на их идентификаторы. Все, что вам нужно сделать, это правильно включить xml, и тогда вы сможете напрямую обращаться к его компонентам по их соответствующим идентификаторам.
Решение 2
Используйте это для кнопки или текстового представления, для которого вы хотите установить onClick для
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="changeActivity"
android:text="button1" />
Затем создайте соответствующую функцию для того, что происходит, когда вы нажимаете на нее.
public void changeActivity(View view)
{
Intent intent = new Intent(FromActivity.this, ToActivity.class);
startActivity(intent);
}
Найти включенный макет, используя findViewById, а затем кнопку поиска в этом представлении, используя findViewById.
View includeView = findViewById ("Идентификатор включенного макета"); Кнопка btn=includeView.findViewById(R.id.mainBtn);
Вам нужен идентификатор его родителя, чтобы получить это:
принять R.id.parent_view
является родителем R.id.nested_button
:
View parent= findViewById(R.id.parent_view);
Button nestedButton= (Button) parent.findViewById(R.id.nested_button);
nestedButton.setText("Whatever");