1

我希望在創建(或頁面加載)時,在ViewPager中的FragmentStateAdapter的片段中創建TextView的setText。我用setOnPageChangeListener測試,但它不起作用,所以你想知道如何做到這一點。貝婁我的adaptater和我如何嘗試兩個使用setOnPageChangeListener,(如果我可以初始化我的領域時創建的片段,這將是非常好的)。如何在FragmentStatePagerAdapter中的片段中動態顯示textview的textText

mytest的:

.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; 
    } 
} 
+0

你必須在這種情況下使用處理程序 – mayu

+0

我已經嘗試了幾個方法與處理程序,但任何工作,我真的不明白如何工作處理程序方法:s – Earest

回答

2

解決方案在這裏我做了,效果不錯

ViewPager AdapterBis.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; 
    } 
} 

我只是拿項目編號在我adaptater並把它送給我的呼叫的匹配值片段。