2012-12-30 10 views
10

Ho una compatibilità ViewPager con un elemento incorporato PagerTitleStrip e funziona correttamente ma i clic su PagerTitleStrip non passano alla visualizzazione corrispondente come previsto. Ho esaminato i documenti ma il widget non ha metodi incorporati per il collegamento di onClickListeners all'oggetto PagerTitleStrip. Questo sembra un po 'strano dal momento che è probabilmente quello che la maggior parte delle persone si aspetterebbe.Gestione di PagerTitleStrip fare clic in compatibile ViewPager basato su frammenti

Quindi la domanda è: come posso rendere selezionabile la striscia del titolo?

Sto anche cercando di capire se c'è un modo per mostrare una sottolineatura di spessore sotto la title strip selezionata senza aggiungere un TabHost se possibile.

Ecco il codice:

principale la 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> 

I due layout frammento che vanno nella ViewPager:

fragment_connect.xml (il secondo è identica così non incluso)

<?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> 

La classe di attività principale StandardViewPagerAct ivity.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); 
    } 
} 

La classe adattatore 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); 
    } 
} 

E, infine, le due implementazioni Frammento identici, tra cui solo il primo - 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; 
     } 
} 

risposta

24

Quindi la domanda è come vorrei rendere il titolo striscia cliccabile?

Si forchetta e rende la propria implementazione che è cliccabile. Oppure, si passa a PagerTabStrip, che è cliccabile. Oppure, si passa a uno degli indicatori ViewPagerIndicator, uno che sembra essere cliccabile e ha un aspetto che ti piace.

Citando the documentation for PagerTitleStrip:

PagerTitleStrip è un indicatore non interattiva degli attuali, il prossimo, e precedenti pagine di un ViewPager ... Per un indicatore interattivo, vedere PagerTabStrip.

+2

'PagerTabStrip' è esattamente ciò di cui avevo bisogno. Grazie! – ccpizza

4

Suppongo che questo è troppo tardi e l'OP deve aver spostato su, ma per coloro che appena arrivato qui alla ricerca di un piccolo widget di, si prega di trovare il mio forchetta here

0

Vorrei anche aggiungere una nota per altri (come me) che sono venuti qui volendo rendere il PagerTitleStrip cliccabile per altri motivi. Puoi davvero renderlo cliccabile. Per farlo, rendilo cliccabile nell'xml e aggiungi una linea xml "onClick" che punta a una funzione (proprio come faresti con un normale pulsante).

La chiave da quel punto è che vorrete sapere in quale pagina siete basati su quel clic perché il comportamento probabilmente cambierà.In questo caso, la riga seguente ti darà l'elemento corrente da utilizzare nel tuo codice successivo (visualizzando un messaggio Toast nel mio caso).

int CurrentItem = this.mViewPager.getCurrentItem(); 
Problemi correlati