2012-12-30 17 views
10

मेरे पास एक एम्बेडेड एक एम्बेडेड PagerTitleStrip तत्व के साथ संगतता है और यह ठीक काम करता है लेकिन PagerTitleStrip पर क्लिक अपेक्षित दृश्य पर स्विच नहीं करते हैं। मैंने दस्तावेज़ों को देखा है लेकिन विजेट में PagerTitleStrip ऑब्जेक्ट परक्लिकलिस्टर्स को अटैच करने के लिए कोई अंतर्निहित विधियां नहीं हैं। यह थोड़ा अजीब लगता है क्योंकि शायद यही है कि ज्यादातर लोग उम्मीद करेंगे।PagerTitleStrip को संभालना संगतता में क्लिक करें Fragment- आधारित ViewPager

तो सवाल यह है कि मैं शीर्षक पट्टी को क्लिक करने योग्य कैसे बनाऊंगा?

मैं यह भी पता लगाने की कोशिश कर रहा हूं कि चयनित शीर्षक पट्टी के नीचे एक मोटी अंडरलाइन दिखाने का कोई तरीका है यदि संभव हो तो टैबहोस्ट जोड़ने के बिना।

यहाँ कोड है:

मुख्य लेआउट 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> 

दो टुकड़ा लेआउट ViewPager में जाने:

fragment_connect.xml (दूसरा समान ऐसा नहीं है शामिल)

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

मुख्य गतिविधि वर्ग 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); 
    } 
} 

एडाप्टर वर्ग 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); 
    } 
} 

और अंत में, सहित केवल पहले दो समान टुकड़ा कार्यान्वयन, - 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; 
     } 
} 

उत्तर

24

तो सवाल यह है कि कैसे मैं शीर्षक पट्टी क्लिक करने योग्य बनाना होगा है?

आप इसे फोर्क करते हैं और अपने स्वयं के कार्यान्वयन को क्लिक करने योग्य बनाते हैं। या, आप PagerTabStrip पर स्विच करते हैं, जो क्लिक करने योग्य है। या, आप ViewPagerIndicator संकेतकों में से एक पर स्विच करते हैं, जो कि क्लिक करने योग्य होता है और आपको वह दिखने वाला लगता है।

the documentation for PagerTitleStrip का हवाला देते हुए:

PagerTitleStrip वर्तमान, अगले और पिछले एक ViewPager के पृष्ठों की एक गैर-सहभागी सूचक है ... एक इंटरैक्टिव सूचक के लिए, PagerTabStrip देखते हैं।

+2

'पेजरटैबस्ट्रिप' बिल्कुल वही है जो मुझे चाहिए। धन्यवाद! – ccpizza

4

मुझे लगता है इस तरह से बहुत देर हो चुकी है और ओपी पर स्थानांतरित कर दिया जाना चाहिए, लेकिन जो लोग सिर्फ यहाँ आया एक छोटे से विजेट के लिए खोज के लिए, कृपया मेरी कांटा लगता है here

0

मैं भी के लिए एक नोट जोड़ना होगा अन्य (मेरे जैसे) जो यहां आए थे PagerTitleStrip को अन्य कारणों से क्लिक करने योग्य बनाना चाहते थे। आप वास्तव में इसे क्लिक करने योग्य बना सकते हैं। ऐसा करने के लिए आप इसे एक्सएमएल में क्लिक करने योग्य बनाते हैं और एक "ऑनक्लिक" एक्सएमएल लाइन जोड़ते हैं जो एक फ़ंक्शन को इंगित करता है (जैसे कि आप सामान्य बटन के साथ)।

उस बिंदु से कुंजी यह है कि आप जानना चाहते हैं कि उस क्लिक के आधार पर आप किस पृष्ठ पर हैं क्योंकि व्यवहार शायद बदल जाएगा।उस स्थिति में निम्न पंक्ति आपको आपके बाद के कोड में उपयोग के लिए वर्तमान आइटम मिल जाएगी (मेरे मामले में टोस्ट संदेश प्रदर्शित करना)।

int CurrentItem = this.mViewPager.getCurrentItem(); 
संबंधित मुद्दे