2012-12-30 39 views
10

Tôi có khả năng tương thích ViewPager với phần tử được nhúng PagerTitleStrip và hoạt động tốt nhưng nhấp vào PagerTitleStrip không chuyển sang chế độ xem tương ứng như mong đợi. Tôi đã xem qua các tài liệu nhưng tiện ích không có bất kỳ phương thức tích hợp nào để đính kèm onClickListeners vào đối tượng PagerTitleStrip. Điều này có vẻ hơi kỳ lạ vì đó có lẽ là điều mà hầu hết mọi người mong đợi.Xử lý PagerTitleStrip nhấp chuột trong compatibiliy ViewPager Fragment

Vì vậy, câu hỏi đặt ra là làm cách nào để làm cho dải tiêu đề có thể nhấp được?

Tôi cũng đang cố gắng tìm hiểu xem có cách nào để hiển thị đường gạch dưới dày trong dải tiêu đề đã chọn mà không thêm một TabHost nếu có thể.

Đây là mã:

chính bố trí 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> 

Hai bố trí đoạn đó đi vào ViewPager:

fragment_connect.xml (thứ hai là giống hệt nhau do đó không đã bao gồm)

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

Lớp hoạt động chính 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); 
    } 
} 

Lớp adaptor 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); 
    } 
} 

Và, cuối cùng, hai triển khai Fragment giống hệt nhau, bao gồm cả chỉ là người đầu tiên - 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; 
     } 
} 

Trả lời

24

Vì vậy, câu hỏi là làm thế nào tôi có thể làm cho danh hiệu dải nhấp được?

Bạn nĩa nó và thực hiện của riêng bạn có thể nhấp. Hoặc, bạn chuyển sang PagerTabStrip, có thể nhấp được. Hoặc, bạn chuyển sang một trong các chỉ số ViewPagerIndicator, một chỉ số có thể nhấp và có giao diện mà bạn thích.

Trích dẫn the documentation for PagerTitleStrip:

PagerTitleStrip là một chỉ số không tương tác của các, tiếp theo, và các trang trước hiện tại của một ViewPager ... Đối với một chỉ số tương tác, xem PagerTabStrip.

+2

'PagerTabStrip' là chính xác những gì tôi cần. Cảm ơn bạn! – ccpizza

4

Tôi cho rằng đây là cách quá muộn và OP phải di chuyển, nhưng đối với những người chỉ đến đây tìm kiếm một widget nhỏ, hãy tìm ngã ba của tôi here

0

Tôi cũng xin thêm ghi chú cho những người khác (như tôi) đã đến đây muốn làm cho PagerTitleStrip có thể nhấp được vì những lý do khác. Bạn thực sự có thể làm cho nó có thể nhấp. Để làm như vậy bạn có thể nhấp vào trong xml và thêm dòng "onClick" xml trỏ đến một hàm (giống như bạn làm với một nút bình thường).

Chìa khóa từ thời điểm đó là bạn sẽ muốn biết bạn đang ở trên trang nào dựa trên nhấp chuột đó bởi vì hành vi có thể sẽ thay đổi.Trong trường hợp đó, dòng sau sẽ đưa bạn mục hiện tại để sử dụng trong mã tiếp theo của bạn (hiển thị một thông điệp Toast trong trường hợp của tôi).

int CurrentItem = this.mViewPager.getCurrentItem(); 
Các vấn đề liên quan