Umgang mit PagerTitleStrip klicken Sie in compatibiliy-Fragment-basierte ViewPager
Ich habe eine Kompatibilität ViewPager mit einem eingebetteten PagerTitleStrip element und es funktioniert gut, aber Klicks auf die PagerTitleStrip nicht wechseln, um die entsprechende Ansicht als erwartet. Ich schaute durch die docs, aber das widget hat keine built-in Methoden zur Befestigung onClickListeners der PagerTitleStrip Objekt. Dies scheint ein wenig seltsam, da, das ist wahrscheinlich das, was die meisten Leute erwarten würden.
Also die Frage ist, wie würde ich den Titel strip anklickbar?
Ich bin auch versucht, herauszufinden, ob es einen Weg gibt, um zu zeigen, eine Dicke Unterstreichung unter dem gewählten Titel Streifen, ohne einen TabHost, wenn überhaupt möglich.
Hier ist der code:
Main layout view_pager.xml:
<?xml version="1.0" encoding="utf-8"?>
<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" >
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v4.view.PagerTitleStrip
android:id="@+id/pager_title_strip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:background="#ccc"
android:textColor="#fff" />
</android.support.v4.view.ViewPager>
</LinearLayout>
Den beiden fragment-layouts, die gehen in den ViewPager:
fragment_connect.xml (der zweite ist identisch, so dass nicht im Lieferumfang enthalten)
<?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="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/text_view_connect"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="connect"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
Dem main activity-Klasse StandardViewPagerActivity.java:
package com.example.standardviewpager;
import java.util.List;
import java.util.Vector;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.PagerTitleStrip;
import android.support.v4.view.ViewPager;
import android.view.Menu;
public class StandardViewPagerActivity extends FragmentActivity {
private MyPagerAdapter pagerAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_pager);
ViewPager myPager = (ViewPager) findViewById(R.id.my_view_pager);
PagerTitleStrip pagerStrip = (PagerTitleStrip) findViewById(R.id.pager_title_strip);
//TODO: add underline for selected title strip
myPager.setAdapter(pagerAdapter);
myPager.setCurrentItem(0);
initialisePaging();
}
private void initialisePaging() {
List<Fragment> fragments = new Vector<Fragment>();
fragments.add(Fragment.instantiate(this, ConnectFragment.class.getName()));
fragments.add(Fragment.instantiate(this, ProfilesFragment.class.getName()));
this.pagerAdapter = new MyPagerAdapter(super.getSupportFragmentManager(), fragments);
ViewPager pager = (ViewPager) super.findViewById(R.id.my_view_pager);
pager.setAdapter(this.pagerAdapter);
}
}
Die adapter-Klasse MyPagerAdapter.java:
package com.example.standardviewpager;
import java.util.List;
import android.os.Parcelable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
public class MyPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
public MyPagerAdapter(FragmentManager supportFragmentManager, List<Fragment> fragments) {
super(supportFragmentManager);
this.fragments = fragments;
}
@Override
public int getCount() {
return this.fragments.size();
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView((View) arg2);
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public CharSequence getPageTitle(int position) {
return String.format("Title %d", position);
}
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
}
Und, endlich, die zwei identische Fragment-Implementierungen, einschließlich der nur für die erste ConnectFragment.java.
package com.example.standardviewpager;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
public class ConnectFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.fragment_connect, container, false);
TextView textView = (TextView) layout.findViewById(R.id.text_view_connect);
textView.setText("onCreateView() Connect");
return (View)layout;
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du Gabel und stellen Sie Ihre eigene Implementierung, die anklickbar ist. Oder, wechseln Sie zu
PagerTabStrip
, die anklickbar ist. Oder wechseln Sie zu einer der ViewPagerIndicator Indikatoren, eine, die passiert werden anklickbar und hat einen look, der Ihnen gefällt.Zitieren die Dokumentation für
PagerTitleStrip
:PagerTabStrip
ist genau das, was ich brauchte. Danke!!!Ich nehme an, das ist viel zu spät und die OP muss verschoben auf,aber für diejenigen, die nur kamen hier auf der Suche nach einem kleinen widget ,bitte finden meine Gabel hier
Ich würde auch ein Hinweis für andere (wie mich), die kam hier machen zu wollen, die PagerTitleStrip anklickbar für andere Gründe. Sie kann in der Tat machen Sie anklickbar. Zu tun, Sie machen es anklickbar in den xml-Code und fügen Sie ein "onClick" xml-Zeile, die Punkte an eine Funktion (wie würden Sie mit einem normalen button).
Den Schlüssel aus, der Punkt ist, dass Sie dann wissen wollen, auf welcher Seite man sich auf dieser Basis auf, weil das Verhalten wird sich wahrscheinlich ändern. In diesem Fall wird die folgende Zeile erhalten Sie das aktuelle Element für nachfolgende code (Anzeige einer Toast-Nachricht in meinem Fall).