0

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

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

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

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

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

主要活动

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);
}
}

测试片段适配器

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(其他的fragment基本相同)

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);
}
}

活动主

<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(其他的fragment 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);
}
}

片段1秒

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>

片段_1_秒

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

1 回答 1

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;
}
于 2013-07-14T03:54:28.183 回答