android - 如何在 FragmentStatePagerAdapter 的 fragment 中动态设置 TextView 的文本

标签 android android-fragments android-viewpager settext fragmentstatepageradapter

我想在 viewPager 创建(或加载页面)时在 viewPager 的 FragmentStateAdapter fragment 中设置我的 TextView 的 setText。我用 setOnPageChangeListener 进行了测试,但它不起作用,所以你知道如何做到这一点。下面是我的适配器以及我如何尝试两个使用 setOnPageChangeListener 的方法,(如果我可以在创建 fragment 时初始化我的字段,那就太好了)。

我的测试:

.setOnPageChangeListener(new OnPageChangeListener() {
                @Override
                public void onPageScrollStateChanged(int arg0) {}

                @Override
                public void onPageScrolled(int arg0, float arg1, int arg2) {}

                @Override
                public void onPageSelected(int arg0) {
                    pdate=(TextView)myPager.getChildAt(arg0).findViewById(R.id.txtPagerDate);
                    pdate.setText(nextDay.get(arg0).get(KEY_DATE).toString());
                    pmaxmin=(TextView)myPager.getChildAt(arg0).findViewById(R.id.txtPagerMaxMin);
                    pmaxmin.setText("MAX: "+nextDay.get(arg0).get(KEY_HIGH).toString()+"° | Min: "+nextDay.get(arg0).get(KEY_LOW).toString()+"°");
                    pprecip=(TextView)myPager.getChildAt(arg0).findViewById(R.id.txtPagerPrecipitations);
                    pprecip.setText("Précipitation: "+nextDay.get(arg0).get(KEY_PRECIPAMOUNT).toString()+" mm");
                    pvent=(TextView)myPager.getChildAt(arg0).findViewById(R.id.txtPagerVent);
                    pvent.setText("Vent: "+nextDay.get(arg0).get(KEY_WINDSPEED).toString()+" Km/h - "+nextDay.get(arg0).get(KEY_WINDDIRECTION).toString());
                    pneige=(TextView)myPager.getChildAt(arg0).findViewById(R.id.txtPagerNeige);
                    pneige.setText("Neige: "+nextDay.get(arg0).get(KEY_SNOWAMOUNT).toString()+" mm");
                    pweatherIcn=(ImageView)myPager.getChildAt(arg0).findViewById(R.id.imgPagerTemps);
                    pweatherIcn.setImageDrawable(drawable2);
                }
            });

ViewPagerAdapterBis.java

package base.appliMeteo.basemeteo;

import java.util.ArrayList;
import java.util.HashMap;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;

public class ViewPagerAdapterBis extends FragmentStatePagerAdapter {


    static ArrayList<HashMap<String, String>> nextDay=MainMeteo.nextDay;


    public ViewPagerAdapterBis(FragmentManager fm) {
        super(fm);
        // TODO Auto-generated constructor stub
    }
    @Override
    public Fragment getItem(int i) {
        Fragment fragment = new ViewPagerAdapterObject();
        Bundle args = new Bundle();
        // Our object is just an integer :-P
        args.putInt(ViewPagerAdapterObject.ARG_OBJECT, i + 1);
        fragment.setArguments(args);
        return fragment;
    }

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

    @Override
    public CharSequence getPageTitle(int position) {
        return "OBJECT " + (position + 1);
    }


}

ViewPageAdapterObject.java

package base.appliMeteo.basemeteo;

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

public class ViewPagerAdapterObject extends Fragment {

    public static final String ARG_OBJECT = "object";

    @Override
    public View onCreateView(LayoutInflater inflater,
            ViewGroup container, Bundle savedInstanceState) {


        View rootView = inflater.inflate(R.layout.meteo_pager, container, false);
        return rootView;
    }
}

最佳答案

这是我做的解决方案,效果很好

ViewPagerAdapterBis.java

public class ViewPagerAdapterBis extends FragmentStatePagerAdapter {
    static int x;
    public ViewPagerAdapterBis(FragmentManager fm) {
        super(fm);
        // TODO Auto-generated constructor stub
    }
    @Override
    public Fragment getItem(int i) {
        x=i;
        Fragment fragment = new ViewPagerAdapterObject();
        Bundle args = new Bundle();
        // Our object is just an integer :-P
        args.putInt(ViewPagerAdapterObject.ARG_OBJECT, i + 1);
        fragment.setArguments(args);
        return fragment;
    }

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

    @Override
    public boolean isViewFromObject(View view, Object object) {
        if(object != null){
            return ((Fragment)object).getView() == view;
        }else{
            return false;
        }
    }



}

ViewPagerAdapterObject.java

public class ViewPagerAdapterObject extends Fragment {

    public static final String ARG_OBJECT = "object";

    TextView pdate;
    TextView pvent;
    TextView phumidite;
    TextView pmaxmin;
    TextView pprecip;
    TextView pneige;
    ImageView pweatherIcn;

    int x=ViewPagerAdapterBis.x;

    static final String KEY_DAY="day";
    static final String KEY_DAYTIME="daytime";
    static final String KEY_DATE="obsdate";
    static final String KEY_HIGH="hightemperature";
    static final String KEY_LOW="lowtemperature";
    static final String KEY_PRECIPAMOUNT="precipamount";
    static final String KEY_SNOWAMOUNT="snowamount";
    static final String KEY_WINDSPEED="windspeed";
    static final String KEY_WINDDIRECTION="winddirection";

    static ArrayList<HashMap<String, String>> nextDay=MainMeteo.nextDay;
    static ArrayList<HashMap<String, String>> nextDayJourney=MainMeteo.nextDayJourney;
    @Override
    public View onCreateView(LayoutInflater inflater,
            ViewGroup container, Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.meteo_pager, container, false);

        pdate=(TextView)rootView.findViewById(R.id.textPagerDateBis);
        pdate.setText(nextDay.get(x).get(KEY_DATE).toString());
        pmaxmin=(TextView)rootView.findViewById(R.id.txtPagerMaxMin);
        pmaxmin.setText("MAX: "+nextDayJourney.get(x).get(KEY_HIGH).toString()+"° | Min: "+nextDayJourney.get(x).get(KEY_LOW).toString()+"°");
        pprecip=(TextView)rootView.findViewById(R.id.txtPagerPrecipitations);
        pprecip.setText("Précipitation: "+nextDay.get(x).get(KEY_PRECIPAMOUNT).toString()+" mm");
        pvent=(TextView)rootView.findViewById(R.id.txtPagerVent);
        pvent.setText("Vent: "+nextDay.get(x).get(KEY_WINDSPEED).toString()+" Km/h - "+nextDay.get(x).get(KEY_WINDDIRECTION).toString());
        pneige=(TextView)rootView.findViewById(R.id.txtPagerNeige);
        pneige.setText("Neige: "+nextDay.get(x).get(KEY_SNOWAMOUNT).toString()+" mm");

        return rootView;
    }
}

我只是在我的适配器中获取项目编号并将其提供给我的 fragment 以调用匹配值。

关于android - 如何在 FragmentStatePagerAdapter 的 fragment 中动态设置 TextView 的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16018886/

相关文章:

android - ViewPager 切换 FragmentPagerAdapter

java - 在 Java 代码中为 Android 添加按钮

android - 错误 - 无法解决导入 com.google

Android caffe 搭建demo 显示错误

android - 抽象谷歌客户端 : Fatal signal 11 (SIGSEGV)

java - 如何多次使用同一个 fragment ?

android - 为什么在 onCreate 之前调用 onAttach?

android - fragment 管理器是否在方向改变后恢复屏幕上最后显示的 fragment ?

android - ViewPager : java. lang.IllegalArgumentException: pointerIndex 超出范围

android - 使用 View 寻呼机的点动画