4

実際にアプリに問題があり、ViewPager と ViewPagerIndicator ( http://viewpagerindicator.com/ ) に何も表示されず、理由がわかりません。すべてを何度もチェックし (アダプターを正しく設定し、instantiateItem にビューを追加し、getCount() で適切なサイズを返すなど)、いくつかのことを試しました (xml のレイアウト パラメーターを変更し、MyPagerAdapter クラスを作り直しました)。 Googleとここで同様の問題を探しても、何も機能しませんでした/私の問題ではありません.

リンクがあるかどうかはわかりませんが、PagerAdapter の instantiateItem メソッドは 2 回しか呼び出されませんが、getCount() は 3 を返します。

私は本当にそれがどこから来るのか分かりません.

OnCreate (ViewPager と ViewPagerIndicator を含むアクティビティの) :

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_infos_vehicle);

    title = (TextView) findViewById(R.id.title);

    ll = (LinearLayout) findViewById(R.id.mygallery);

    filenames = new ArrayList<String>();

    [...]

    MyPagerAdapter adapter = new MyPagerAdapter(getResources().getStringArray(R.array.infos_vehicle));

    ViewPager pager = (ViewPager) findViewById(R.id.pager);
    pager.setAdapter(adapter);

    TitlePageIndicator indicator = (TitlePageIndicator) findViewById(R.id.titles_pager);
    indicator.setFooterIndicatorStyle(IndicatorStyle.Triangle);
    indicator.setViewPager(pager);

    [...]
}

MyPagerAdapter クラス (3 番目のケースは、より見やすいテストのためにここにありました。失敗したのが私の fillGeneral または fillEquipments メソッドではないかどうかを確認してください):

プライベート クラス MyPagerAdapter は PagerAdapter を拡張します {

private final String[] TITLES;

public MyPagerAdapter(String[] titles) {
    TITLES = titles;
}

    @Override
    public int getCount() {
        return (TITLES.length);
    }

    @Override
    public Object instantiateItem(View collection, int position) {
        LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = null;

        switch (position) {
        case (0):
            v = inflater.inflate(R.layout.linear_layout, null);
            fillGeneral((ViewGroup) v.findViewById(R.id.layout));
            break;
        case (1):
            v = inflater.inflate(R.layout.linear_layout, null);
            fillEquipments((ViewGroup) v.findViewById(R.id.layout));
            break;
        case (2):
            v = new ImageView(getApplicationContext());
            ((ImageView) v).setImageDrawable(getApplicationContext().getResources().getDrawable(android.R.drawable.alert_dark_frame));
            break;
        }
        ((ViewPager) collection).addView(v);
        return (v);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return (TITLES[position]);  
    }

    @Override
    public void destroyItem(View collection, int position, Object view) {
        ((ViewPager) collection).removeView((View) view);
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return (arg0.equals(arg1));
    }

    @Override
    public Parcelable saveState() {
        return null;
    }

}

アクティビティ xml :

<ScrollView 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" >
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="10dp"
            android:text="@string/hello_world"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textColor="@color/first_color" />

        <Button
            android:id="@+id/try_vehicle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/title"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="40dp"
            android:onClick="tryingAlert"
            android:text="@string/try_vehicle" />

        <Button
            android:id="@+id/ask_informations"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/try_vehicle"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="20dp"
            android:onClick="informationsAlert"
            android:text="@string/ask_informations" />

        <Button
            android:id="@+id/remove_selection"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="removeFromSelection"
            android:layout_below="@+id/ask_informations"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="20dp"
            android:text="@string/remove_selection" />

        <HorizontalScrollView
            android:id="@+id/scroll"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/remove_selection"
            android:layout_marginTop="18dp"
            android:scrollbars="none" >

            <LinearLayout
                android:id="@+id/mygallery"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal" >
            </LinearLayout>

        </HorizontalScrollView>

        <com.viewpagerindicator.TitlePageIndicator
            android:id="@+id/titles_pager"
            android:layout_below="@id/scroll"
            android:layout_height="wrap_content"
            android:layout_width="fill_parent" />

        <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@id/titles_pager" />

    </RelativeLayout>
</ScrollView>

それが私に与えるもの (アクティビティはここで終了し、示されているように、ViewPagerIndicator は何も表示しません): http://i.imgur.com/vRa1O.jpg (外部リンク、申し訳ありませんが写真を投稿できません!)

4

3 に答える 3

3

さて、最終的には問題はありませんでした。私がミスをしただけです。

言ったように、ViewPagerIndicatorは白地に白だったので、今は見えません。

ViewPagerの場合、それは私のScrollViewの最後にありました。つまり、「実際の」画面スペースが利用できなかったため、効果がありませんでしたandroid:layout_height="match_parent"。これはViewPagerの一般的な問題のようですが、それを適応させるために何ができるかを見ていきます。

とにかく助けてくれてありがとう、私はこの投稿が誰かに役立つことを願っています!

于 2012-09-24T09:12:35.527 に答える
1

同じ問題に直面し、その解決策を思いつきました。少しスパイクがあるかもしれませんが、動作します) まず、xml ファイル セットで

<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:layout_below="@+id/tabs"/>

ViewPager内でフラグメントサイズをチェックするためのカスタムリスナーを作成した後

public interface ViewPagerListener {
    void onChange(int height);
}

フラグメントに実装します

public class FriendProfileTabstFragment extends AbstractFragment implements ViewPagerListener
....
pager = (ViewPager) fragmentView.findViewById(R.id.pager);
adapter = new TabsPagerAdapter(getChildFragmentManager(),user,this);

そして、レイアウトの高さを設定できるメソッド onChange を実装します

@Override
public void onChange(int height) {
    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) pager.getLayoutParams();
    params.height = height;
    pager.setLayoutParams(params);
}

子フラグメント内で、layout_height を取得できます

View fragmentView = inflater.inflate(R.layout.tab_without_list_fragment, null);
userRecordsList = (LinearLayout) fragmentView.findViewById(R.id.user_records_list);

ビューを埋めるときに、レイアウトの高さを取得します

userRecordsList.measure(userRecordsList.getWidth(),userRecordsList.getHeight());
int height = userRecordsList.getMeasuredHeight();
listener.onChange(height);

希望、この助け。より良い解決策を見つけたら、私を修正してください。

于 2014-02-28T19:39:01.403 に答える