您的位置:首页 > 编程语言 > PHP开发

笔记:ViewPager+FragmentPagerAdapter数据刷新问题

2016-01-12 22:57 831 查看
做了一个ViewPager+FragmentPagerAdapter滑动功能,后面由于一个需求,要求每次离开ViewPager对应页面回来后都有跟服务器请求数据,来确保数据是否发生改变。。。。这里省略100000字。。。。。

因此把请求写到生命周期onResume()里,结果就发现了一大串问题,比如FragmentPagerAdapter里数据更新等等。。。。。

 

这里用一个demo模拟下,来做个笔记:

demo演示,进来显示数据,然后跳到其他页面再回来(数据源发生改变),看其viewpager对应的数据是否改变





布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>

<Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="第二个页面"
/>
<com.viewpagerindicator.TabPageIndicator
android:id="@+id/indicator"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
/>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
/>

</LinearLayout>

MainActivity
package com.example.testandroid;

import java.util.ArrayList;
import java.util.Random;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.view.View;

import com.viewpagerindicator.TabPageIndicator;

public class MainActivity extends FragmentActivity {

private ArrayList<String> datas = new ArrayList<String>();
private ArrayList<Fragment> fragments = new ArrayList<Fragment>();

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

findViewById(R.id.button).setOnClickListener(
new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
startActivity(new Intent(MainActivity.this,TestActivity.class));
}
});

}

@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();

//移除之前的Fragment
FragmentManager fm = getSupportFragmentManager();
if (fragments.size() > 0) {
FragmentTransaction ft = fm.beginTransaction();
for (Fragment f : this.fragments) {
ft.remove(f);
}
ft.commit();
ft = null;
fm.executePendingTransactions();
}

datas.clear();
fragments.clear();
//模拟数据
for (int i = 0; i < 3; i++) {
String str = "T" + i + new Random().nextInt(100);
datas.add(str);
fragments.add(TestFragment.newInstance(str));
}

FragmentPagerAdapter adapter = new GoogleMusicAdapter(fm, fragments);
ViewPager pager = (ViewPager) findViewById(R.id.pager);
pager.setAdapter(adapter);

TabPageIndicator indicator = (TabPageIndicator) findViewById(R.id.indicator);
indicator.setViewPager(pager);
}

class GoogleMusicAdapter extends FragmentPagerAdapter {

private ArrayList<Fragment> fragments;

public GoogleMusicAdapter(FragmentManager fm,ArrayList<Fragment> fragment) {
super(fm);
this.fragments = fragment;
}

@Override
public Fragment getItem(int position) {
return fragments.get(position);
}

@Override
public CharSequence getPageTitle(int position) {
return datas.get(position).toUpperCase();
}

@Override
public int getCount() {
return fragments.size();
}

@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}

}
}


TestFragment

package com.example.testandroid;

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.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;

public final 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;
}

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

TestActivity

package com.example.testandroid;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class TestActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);

TextView textView = new TextView(this);
textView.setText("第二个页面");
textView.setPadding(50, 50, 50, 50);
textView.setTextSize(50);

setContentView(textView);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  viewpager