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;
        }
}
InformationsquelleAutor ccpizza | 2012-12-30
Schreibe einen Kommentar