Ich werde zum ersten Mal auf Qiita posten! Bis jetzt habe ich die Artikel vieler Leute gesehen und viel studiert, aber ich werde versuchen, Artikel zu schreiben, die für viele Leute hilfreich sind, also danke.
Was das Hauptthema betrifft, wollte ich bei Verwendung von TabLayout die Fragment-Methode aufrufen, indem ich auf das Symbolleistenmenü von Aktivität klickte. Die Seite, die auf leicht verständliche Weise geschrieben wurde, konnte ich jedoch nicht finden. Daher werde ich sie zusammenfassen. Zunächst werde ich eine einfache Tab-Implementierung mit TabLayout und ViewPager vorstellen. Es gibt viele Artikel, in denen die Implementierung von Registerkarten vorgestellt wird. In diesem Artikel werde ich jedoch auf Materialdesign eingehen und es erstellen. Im nächsten Artikel werde ich zusammenfassen, wie Fragment aus Aktivität und Aktivität aus Fragment betrieben werden.
Die Höhe der Symbolleiste in Material Design beträgt 4 dp. Sie können auch @ dimen / abc_action_bar_elevation_material verwenden. Elevation & shadows - Material Design
values/styles.xml
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="...MainActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:theme="?attr/actionBarTheme"
app:title="Tab Sample"
app:titleTextColor="@color/white"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
style="@style/MyCustomTabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:elevation="4dp" />
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</LinearLayout>
@ style / MyCustomTabLayout ist ein Originalstil, der die Textfarbe einer Registerkarte ändert, wenn sie ausgewählt ist und wenn sie nicht ausgewählt ist. In Material Design ist die Textfarbe der ausgewählten Registerkarte #fff und die Textfarbe der nicht ausgewählten Registerkarte # fff / Deckkraft 70%. Tabs - Components - Material Design Zusammenfassung der Transparenz des ARGB-Farbcodes - Qiita
values/styles.xml
<resources>
...
<style name="MyCustomTabLayout" parent="Widget.Design.TabLayout">
<item name="tabTextAppearance">@style/MyCustomTabText</item>
<item name="tabSelectedTextColor">@color/white</item>
</style>
<style name="MyCustomTabText" parent="TextAppearance.AppCompat.Button">
<item name="android:textColor">@color/white_70percent</item>
</style>
</resources>
Fragment Erstellen Sie als Nächstes ein Fragment. Die Rolle von Fragment bei der Implementierung von Registerkarten kann über den Adapter in ViewPager eingeführt werden, um Benutzerinteraktionen zu akzeptieren. Und jedes Mal, wenn sich die Auswahl der Registerkarten ändert, wechselt das von ViewPager angezeigte Fragment. Sie müssen also so viele Fragmente erstellen, wie Registerkarten vorhanden sind. (Wenn sich der Benutzer bei mehreren Registerkarten gleich verhalten muss, kann ein Fragment mit weniger Fragmenten als der Anzahl der Registerkarten implementiert werden, indem es mehreren Registerkarten entspricht.) Das Fragment ähnelt der Aktivität. Es besteht aus einer Klasse / Java-Datei und einer Layout / XML-Datei. Und da Fragment einen Lebenszyklus hat, kann es auf die gleiche Weise wie Aktivität verwendet werden. Beachten Sie jedoch, dass sich der Fragmentlebenszyklus vom Aktivitätslebenszyklus unterscheidet.
Main1Fragment.java
package ...;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Main1Fragment extends Fragment {
public Main1Fragment() {
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_main1, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
}
Main2Fragment.java
package ...;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Main2Fragment extends Fragment {
public Main2Fragment() {
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_main2, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
}
Dies ist die Grundform des Fragments. Die OnCreatedView () -Methode gibt eine aufgeblasene Ansicht des Fragmentlayouts zurück. Die onViewCreated () -Methode kann auf dieselbe Weise wie die onCreate () -Methode in Activity verwendet werden. Da die ursprüngliche Operation zum Überschreiben von super.onViewCreated (view, savedInstanceState) ausgeführt wird, wird nachfolgend beliebiger Code beschrieben.
Ändern Sie hier das Layout des Fragments, damit die beiden Layouts unterschieden werden können. Ändern Sie jetzt nur den Text der Textansicht.
layout/fragment_main1.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
tools:context="...Main1Fragment">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="fragment1" />
</LinearLayout>
layout/fragment_main2.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
tools:context="...Main2Fragment">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="fragment2" />
</LinearLayout>
Adapter Erstellen Sie als Nächstes einen Adapter. Der Adapter ist ein Mechanismus zum Einführen von Fragment in ViewPager. Der Adapter, der in ViewPager festgelegt werden kann, ist ein Adapter, der FragmentPagerAdapter erbt.
OriginalFragmentPagerAdapter.java
package ...;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.view.ViewGroup;
public class OriginalFragmentPagerAdapter extends FragmentPagerAdapter {
private CharSequence[] tabTitles = {"Tab 1", "Tab 2"};
public OriginalFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public CharSequence getPageTitle(int position) {
return tabTitles[position];
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new Main1Fragment();
case 1:
return new Main2Fragment();
default:
return null;
}
}
@Override
public int getCount() {
return tabTitles.length;
}
}
Deklarieren Sie den Titel der Registerkarte mit einem Array vom Typ CharSequence. Methode getCount (): Gibt die Gesamtzahl der Registerkarten zurück. Methode getPageTitle (): Die Tabulatortitel für die Gesamtzahl der Tabulatoren werden auf der Registerkarte angezeigt. Methode getItem (): Reflektiert das der Position entsprechende Fragment. Wird jedes Mal aufgerufen, wenn Sie eine Registerkarte auswählen. Zu diesem Zeitpunkt erhält es eine Position als Argument, sodass das dieser Position entsprechende Fragment zurückgegeben wird. Activity Schließlich ist es die Einstellung der Aktivität.
MainActivity.java
package ...;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
OriginalFragmentPagerAdapter adapter = new OriginalFragmentPagerAdapter(getSupportFragmentManager());
ViewPager viewPager = findViewById(R.id.viewPager);
viewPager.setOffscreenPageLimit(2);
viewPager.setAdapter(adapter);
TabLayout tabLayout = findViewById(R.id.tabLayout);
tabLayout.setupWithViewPager(viewPager);
}
}
Deklarieren Sie den OriginalFragmentPagerAdapter. Sie können eine Instanz erstellen, indem Sie FragmentManager als Argument verwenden und beim Deklarieren getSupportFragmentManager () übergeben. Verknüpfen Sie ViewPager mit der ID des Layouts und legen Sie den Adapter mit der Methode setAdapter () fest. Die Methode setOffscreenPageLimit () gibt als Argument an, wie viele Seiten vor dem Fragment beibehalten werden sollen, wenn der Benutzer die Seite von ViewPager ändert. Wenn Sie diesen Wert beispielsweise in ViewPager, in dem 3 Fragmente eingeführt wurden, auf 2 setzen, wird die erste Seite neu generiert, wenn Sie von Seite 1 zu Seite 3 wechseln und zu Seite 1 zurückkehren. Wenn Sie den Wert usw. beibehalten und verhindern möchten, dass er erneut geladen wird, müssen Sie daher OffscreenPageLimit (3) festlegen. TabLayout ist dann die setupWithViewPager () -Methode. Wenn Sie den ViewPager mit dem Adapter-Set festlegen, wird beim Klicken auf eine Registerkarte das dieser Registerkarte entsprechende Fragment im ViewPager angezeigt.
Mit den oben genannten Informationen können Sie das Fragment mit einem statischen Layout anzeigen, in dem sich die Textansicht befindet, und Sie können bestätigen, dass das Fragment des ViewPagers durch Betätigen des ViewPagers und der Registerkarten umgeschaltet werden kann. Als nächstes empfängt es die Operation des Benutzers in Fragment. Schreiben wir ein Programm, das einen EditText und eine Schaltfläche im Layout des Fragments erstellt, beim Klicken auf die Schaltfläche eine Zeichenfolge von EditText empfängt und in Toast anzeigt.
Ändern Sie das Layout des Fragments.
layout/fragment_main1.xml
<LinearLayout ...>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="fragment1" />
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="text" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button_Fragment1" />
</LinearLayout>
Ändern Sie die Fragment-Java-Datei.
Main1Fragment.java
...
public class Main1Fragment extends Fragment {
...
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
final EditText editText = view.findViewById(R.id.editText);
Button button = view.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), editText.getText().toString(), Toast.LENGTH_LONG).show();
}
});
}
}
Um die Ansichts-ID des Layout-Layouts des Fragments zu verbinden, schreiben Sie sie als view.findViewById (R.id ...) in die Methode onViewCreated (). Die Argumentansicht ist die Ansicht, die von der OnCreatedView () -Methode beim Erstellen des Fragments zurückgegeben wurde, sodass Sie die ID aus diesem Layout zuordnen können. In Bezug auf die Stelle, an der Toast angezeigt wird, ist das erste Argument Kontext von makeText getContext (). Hier haben Sie MainActivity.this, this, getApplicationContext () usw. in Activity geschrieben. Sie können jedoch die Aktivität des übergeordneten Elements, in dem das Fragment ausgeführt wird, erhalten, indem Sie getContext () in Fragment schreiben.
Jetzt können Sie die grundlegenden Registerkarten implementieren. Im nächsten Artikel Operation "Aktivität zu Fragment" - Qiita möchte ich vorstellen, wie die Fragmentmethode von Aktivität aufgerufen wird. Ich werde.
Recommended Posts