在同一个应用程序中使用ViewPagerIndicator可以有2个单独的水平视图滑动部分吗?

时间:2013-07-13 23:30:13

标签: android android-viewpager viewpagerindicator

正如您可能从标题中猜到的那样,在Android开发(以及一般编码)方面,我总是一个新手。

我使用ViewPagerIndicator库和我发现的教程中的代码在我的应用程序中实现了水平视图滑动。这是事情,现在我想在同一个应用程序的不同部分设置另一个水平视图滑动部分(具有不同的内容)。我正在尝试找出我需要在我的应用程序的新水平视图滑动部分中更改的代码。

这是我到目前为止所尝试的内容:我创建了2个新类“ActivityMainSecond.java”和“Fragment1Second.java”,并复制并粘贴了它们的等效代码(MainActivity& Fragment1)。同样地,我对它们各自的XML(“activity_main_second.xml”&“fragment_1_second.xml”)做了同样的事情。我改变的唯一代码是在java类中,我链接到新的xml布局(例如:R.layout),另外我更改了新的“fragment_1_second.xml”上的文本,所以它与第一个上的等价文件不同水平视图滑动部分。问题是,当我运行它时,它只显示第一个水平视图滑动部分的旧片段!

我是否需要为新部分创建另一个“TestFragment”和TestFragmentAdapter“类?我需要创建第二个寻呼机(例如:@ + id / pager2)吗?请原谅我的无知,我完全迷失在这里......

这是我用于使用ViewPageIndicator的第一个水平视图滑动部分的代码。

MainActivity

import com.viewpagerindicator.PageIndicator;
import com.viewpagerindicator.TitlePageIndicator;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;

public class MainActivity extends FragmentActivity {
TestFragmentAdapter mAdapter;
ViewPager mPager;
PageIndicator mIndicator;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mAdapter = new TestFragmentAdapter(getSupportFragmentManager());

    mPager = (ViewPager)findViewById(R.id.pager);
    mPager.setAdapter(mAdapter);

    mIndicator = (TitlePageIndicator)findViewById(R.id.indicator);
    mIndicator.setViewPager(mPager);
}
}

测试片段

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.TextView;

public class TestFragment extends Fragment{

private static final String KEY_CONTENT = "TestFragment:Content";

public static TestFragment newInstance(String content){
    TestFragment fragment = new TestFragment();

    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < 20; i++){
        builder.append(content).append(" ");
    }
    builder.deleteCharAt(builder.length() -1);
    fragment.mContent = builder.toString();

    return fragment;
}

private String mContent = "???";

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    if ((savedInstanceState != null) && savedInstanceState.containsKey(KEY_CONTENT)){
        mContent = savedInstanceState.getString(KEY_CONTENT);
    }
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    TextView text = new TextView(getActivity());
    text.setGravity(Gravity.CENTER);
    text.setText(mContent);
    text.setTextSize(20 * getResources().getDisplayMetrics().density);
    text.setPadding(20, 20, 20, 20);

    LinearLayout layout = new LinearLayout(getActivity());
    layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,   LayoutParams.FILL_PARENT));
    layout.setGravity(Gravity.CENTER);
    layout.addView(text);
    return layout;
}

public void onSavedInstanceState(Bundle outState){
    super.onSaveInstanceState(outState);
    outState.putString(KEY_CONTENT, mContent);
}
}

TestFragmentAdapter

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import com.viewpagerindicator.IconPagerAdapter;

public class TestFragmentAdapter extends FragmentPagerAdapter implements IconPagerAdapter{
protected static final String[] CONTENT = new String[] {
    "This", "Is", "A", "Test" , "Too"   
};

private int mCount = CONTENT.length;

public TestFragmentAdapter(FragmentManager fm) {
    super(fm);
}

@Override
public int getIconResId(int index) {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public Fragment getItem(int position) {
    Fragment fragment = new Fragment1();
    switch(position){
    case 0:
        fragment = new Fragment1();
        break;
    case 1:
        fragment = new Fragment2();
        break;
    case 2:
        fragment = new Fragment3();
        break;
    case 3:
        fragment = new Fragment4();
        break;
    case 4:
        fragment = new Fragment5();
        break;  
    }
    return fragment;
}

@Override
public int getCount() {
    return mCount;
}

@Override
public CharSequence getPageTitle(int position){
    String title = "";
    switch(position){
    case 0:
        title = "Fragment 1";
        break;
    case 1:
        title = "Fragment 2";
        break;
    case 2:
        title = "Fragment 3";
        break;
    case 3:
        title = "Fragment 4";
        break;
    case 4:
        title = "Fragment 5";
        break;  
    }

    return title;
}

public void setCount(int count){
    if (count > 0 && count < 10){
        mCount = count;
        notifyDataSetChanged();
    }
}


}

Fragment1(其他片段基本相同)

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment1 extends Fragment{

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    return inflater.inflate(R.layout.fragment_1, null);
}
}

activity_main

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" 
xmlns:app="http://schemas.android.com/apk/res/com.rufflez.viewpagerexample">
<com.viewpagerindicator.TitlePageIndicator 
    android:id="@+id/indicator"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="10dip"
    android:background="#000000"
    android:textColor="#99C224"
    app:footerColor="#99C224"
    app:footerLineHeight="1dp"
    app:footerIndicatorStyle="underline"
    app:footerIndicatorHeight="3dp"
    app:selectedColor="#99C224"
    app:selectedBold="true"/>
<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"/>


</LinearLayout>

fragment_1(其他片段XML基本相同)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView 
    android:gravity="center"
    android:text="Fragment 1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

</LinearLayout>

这是我正在尝试创建的新的水平视图滑动部分:

MainActivitySecond

import com.viewpagerindicator.PageIndicator;
import com.viewpagerindicator.TitlePageIndicator;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;

public class MainActivitySecond extends FragmentActivity {
TestFragmentAdapter mAdapter;
ViewPager mPager;
PageIndicator mIndicator;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_second);

    mAdapter = new TestFragmentAdapter(getSupportFragmentManager());

    mPager = (ViewPager)findViewById(R.id.pager);
    mPager.setAdapter(mAdapter);

    mIndicator = (TitlePageIndicator)findViewById(R.id.indicator);
    mIndicator.setViewPager(mPager);
}
}

Fragment1Second

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment1Second extends Fragment{

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    return inflater.inflate(R.layout.fragment_1_second, null);
}
}

activity_main_second

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" 
xmlns:app="http://schemas.android.com/apk/res/com.rufflez.viewpagerexample">
<com.viewpagerindicator.TitlePageIndicator 
    android:id="@+id/indicator"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="10dip"
    android:background="#000000"
    android:textColor="#99C224"
    app:footerColor="#99C224"
    app:footerLineHeight="1dp"
    app:footerIndicatorStyle="underline"
    app:footerIndicatorHeight="3dp"
    app:selectedColor="#99C224"
    app:selectedBold="true"/>
<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"/>

</LinearLayout>

fragment_1_second

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView 
    android:gravity="center"
    android:text="Something Different"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

</LinearLayout>

1 个答案:

答案 0 :(得分:0)

您需要创建一个新适配器,因为适配器指定了获取内容的位置。特别是这部分是你的问题:

@Override
public Fragment getItem(int position) {
    Fragment fragment = new Fragment1();
    switch(position){
    case 0:
        fragment = new Fragment1();// <-- should be a new fragment that you use
        break;
    case 1:
        fragment = new Fragment2(); // <-- should be a new fragment that you use
        break;
    case 2:
        fragment = new Fragment3(); // <-- should be a new fragment that you use
        break;
    case 3:
        fragment = new Fragment4(); // <-- should be a new fragment that you use
        break;
    case 4:
        fragment = new Fragment5(); // <-- should be a new fragment that you use
        break;  
    }
    return fragment;
}