文本不显示在ViewPager [英] Text does not display on ViewPager

查看:193
本文介绍了文本不显示在ViewPager的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个问题,当我开始了我的应用我的ViewPager文字不显示。不过,文本也结束显示,当我刷卡的标签。我不知道是什么问题,我想文本尽快我的应用程序开始出现。任何帮助将是AP preciated!谢谢。

国家活动(主要活动

 包myapps.countryapp;进口android.content.Context;
进口android.support.v4.app.Fragment;
进口android.support.v4.app.FragmentManager;
进口android.support.v4.app.FragmentPagerAdapter;
进口android.support.v4.view.ViewPager;
进口android.support.v7.app.AppCompatActivity;
进口android.os.Bundle;
引入静态myapps.countryapp.R.id.pager;公共类CountriesActivity扩展AppCompatActivity {
@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_countries);    ViewPager viewPager =(ViewPager)findViewById(寻呼机);
    viewPager.setAdapter(新MyAdapter(getSupportFragmentManager()));
}公共类MyAdapter扩展FragmentPagerAdapter {
    最终诠释PAGE_COUNT = 2;
    //创建标签瓷砖。
    私人字符串tabTiles [] =新的String [] {国家,地图};
    上下文语境;    公共MyAdapter(FragmentManager FM){
        超(FM);
    }    @覆盖
    公共片段的getItem(INT位置){
        如果(位置== 0){
            片段fragmentList =新的国家();
            返回fragmentList;
        }其他{
            国家fragmentList =新的国家();
            返回fragmentList;
        }
    }    @覆盖
    公众诠释的getCount(){
        返回PAGE_COUNT;
    }    @覆盖
    公共CharSequence的getPageTitle(INT位置){
        返回tabTiles [位置]
    }
  }} //类的结束

Countries.java(片段文件)

 包myapps.countryapp;进口android.os.Bundle;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.support.v4.app.Fragment;
/ **
 *一个简单的{@link片段}子类。
 * /
公共类国家扩展片段{
公开的国家(){
    //必需的空公共构造
}
@覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
                         捆绑savedInstanceState){
    //充气的布局该片段
    查看查看= inflater.inflate(R.layout.fragment_countries,集装箱,FALSE);
    返回视图。
}}

activity_countries(主要XML文件

 < LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
的xmlns:工具=htt​​p://schemas.android.com/tool​​s的android:layout_width =match_parent
机器人:layout_height =FILL_PARENT机器人:paddingLeft =@扪/ activity_horizo​​ntal_margin
机器人:paddingRight =@扪/ activity_horizo​​ntal_margin
机器人:paddingTop =@扪/ activity_vertical_margin
机器人:paddingBottom会=@扪/ activity_vertical_margin
工具:上下文=myapps.countryapp.CountriesActivity>< android.support.v4.view.ViewPager
    的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:ID =@ + ID /寻呼机
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent>< android.support.v4.view.PagerTabStrip
    机器人:layout_width =match_parent
    机器人:layout_height =40dp
    机器人:paddingTop =4DP
    机器人:paddingBottom会=10dp
    机器人:layout_gravity =顶
    机器人:ID =@ + ID / pagerStrip>< /android.support.v4.view.PagerTabStrip>< /android.support.v4.view.ViewPager>

fragment_countries.xml

 <的FrameLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
的xmlns:工具=htt​​p://schemas.android.com/tool​​s的android:layout_width =match_parent
机器人:layout_height =match_parent工具:上下文=myapps.countryapp.Countries>< - TODO:更新空白片段布局 - >
 < ListView控件
      机器人:layout_width =match_parent
      机器人:layout_height =match_parent
      机器人:ID =@ + ID / MyListView>
  < /&的ListView GT;< /&的FrameLayout GT;


解决方案

好吧,这里是我的活动,viewpager和片段的例子:

活动:

 公共类KataloziSlike扩展AppCompatActivity {
    私人AdapterCustomPage mAdapterCustomPage;
    私人ViewPager mViewPager;
    私人TextView的电视,brojStranica;
    私人的ImageButton设置,共享,locirajMe,备用;    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_katalozi_slike);        如果(Static.katalozi.getSlikeKataloga()。大小()== 1){
            Message.message(KataloziSlike.this,促销伊马萨莫jednu stranu);
        }
        brojStranica =(的TextView)findViewById(R.id.tvBrojStranicaKataloga);
        brojStranica.setText(将String.valueOf(1)+/+将String.valueOf(Static.katalozi.getSlikeKataloga()大小()+ 1));        mAdapterCustomPage =新AdapterCustomPage(getFragmentManager(),这一点);
        mViewPager =(ViewPager)findViewById(R.id.view_pagerZaSlikeKataloga);
        mViewPager.setAdapter(mAdapterCustomPage);
        mViewPager.setCurrentItem(0);
        mViewPager.addOnPageChangeListener(新ViewPager.OnPageChangeListener(){
            @覆盖
            公共无效onPageScrolled(INT位置,浮positionOffset,诠释positionOffsetPixels){            }            @覆盖
            公共无效使用onPageSelected(INT位置){                如果(Static.katalozi.getSlikeKataloga()。大小()!= 1){
                    如果(位置== 0){
                        Message.message(KataloziSlike.this,纳prvoj stranici kataloga STE);
                    }否则如果(位置== Static.katalozi.getSlikeKataloga()尺寸() - 1){
                        Message.message(KataloziSlike.this,纳poslednjoj stranici kataloga STE);
                    }
                }                如果(位置< = Static.katalozi.getSlikeKataloga()尺寸() - 1){
                    YourFragmentInterface片段=(YourFragmentInterface)mAdapterCustomPage.instantiateItem(mViewPager,位置);
                    如果(片段!= NULL){
                        fragment.fragmentBecameVisible();
                    }
                }                brojStranica.setText(将String.valueOf(位置+ 1)+/+将String.valueOf(Static.katalozi.getSlikeKataloga()大小()+ 1));
            }            @覆盖
            公共无效onPageScrollStateChanged(INT状态){            }
        });
}
}

适配器:

 公共类AdapterCustomPage扩展FragmentStatePagerAdapter {    受保护的语境mContext;
    INT maxBrojStrana = Static.katalozi.getSlikeKataloga()的大小()。
    INT pozicija;
    私人的ArrayList< Katalozi> mKatalozi;    公共AdapterCustomPage(FragmentManager FM,上下文的背景下){
        超(FM);
        mContext =背景;
    }
    @覆盖
    公共片段的getItem(INT位置){        //创建片段对象
        如果(位置== maxBrojStrana){
            片段片段=新ImageFragmentMapKatalozi();
            返回片段;
        }其他{
            片段片段=新ImageFragmentKatalozi();
            fragment.onPause();
            捆绑ARGS =新包();
            Log.i(Poizicija,将String.valueOf(位置));
            字符串URL = Static.katalozi.getSlikeKataloga()获得(位置)。
            args.putString(URL,URL);            fragment.setArguments(参数);
            字符串link = Static.katalozi.getUrl();
            args.putString(linkKataloga链接);
            返回片段;
        }    }
    @覆盖
    公众诠释getItemPosition(Object对象){
        pozicija = super.getItemPosition(对象);
        返回super.getItemPosition(对象);
    }    @覆盖
    公众诠释的getCount(){
        返回maxBrojStrana + 1;
    }}

和片段:

 公共类ImageFragmentKatalozi扩展片段实现KataloziSlike.YourFragmentInterface {
    私人PhotoViewAttacher mAttacher;
    私人ImageView的ImageView的;
    私人捆绑ARGS;
    私人Button按钮;    @覆盖
    公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,捆绑savedInstanceState){        查看rootView = inflater.inflate(R.layout.fragment_katalozi_slike,集装箱,FALSE);        ARGS = getArguments();
        ImageView的=(ImageView的)rootView.findViewById(R.id.imageViewAdapterZaListanjeKataloga);
        回调imageLoadedCallback =新的回调(){            @覆盖
            公共无效的onSuccess(){
                如果(mAttacher!= NULL){
                    mAttacher.u​​pdate();
                }其他{
                    mAttacher =新PhotoViewAttacher(ImageView的);                }
            }            @覆盖
            公共无效onerror的(){
                // TODO自动生成方法存根            }
        };        Picasso.with(getActivity()).load(args.getString(\"url\")).placeholder(R.drawable.load).error(R.drawable.error).into(imageView, imageLoadedCallback);
        mAttacher =新PhotoViewAttacher(ImageView的);
        按钮=(按钮)rootView.findViewById(R.id.zaProveru);
        button.setOnClickListener(新View.OnClickListener(){
            @覆盖
            公共无效的onClick(视图v){            }
        });
        返回rootView;
    }
    @覆盖
    公共无效onResume(){
        super.onResume();
        Toast.makeText(getActivity(),sadsadasd,Toast.LENGTH_SHORT);
    }
    @覆盖
    公共无效fragmentBecameVisible(){
        mAttacher.u​​pdate();
    }
}

有什么问题你的是,当第一个片段是由它不是instatiated,只有当你刷卡(片段上的变化),那么它的表现。 Reffer到我的例子

I am having an issue where my ViewPager text does not display when I start up my application. However, the texts do end up showing when I swipe the tab. I am not sure what the problem is and I would like the text to appear as soon as my application starts. Any help would be appreciated! thanks.

Countries Activity(MAIN ACTIVITY)

package myapps.countryapp;

import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import static myapps.countryapp.R.id.pager;

public class CountriesActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_countries);

    ViewPager viewPager = (ViewPager) findViewById(pager);
    viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));
}

public class MyAdapter extends FragmentPagerAdapter {
    final  int PAGE_COUNT = 2;
    //Create tab tiles.
    private String tabTiles[]  = new String[] {"Countries", "Map"};
    Context context;

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

    @Override
    public Fragment getItem(int position) {
        if(position == 0){
            Fragment fragmentList = new Countries();
            return fragmentList;
        }else {
            Countries fragmentList = new Countries();
            return fragmentList;
        }
    }

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

    @Override
    public CharSequence getPageTitle(int position) {
        return tabTiles[position];
    }
  }

}//end of class

Countries.java(fragment file)

package myapps.countryapp;

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


/**
 * A simple {@link Fragment} subclass.
 */
public class Countries extends Fragment {


public Countries() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_countries, container, false);
    return view;
}

}

activity_countries(MAIN XML FILE)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="fill_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="myapps.countryapp.CountriesActivity">

<android.support.v4.view.ViewPager
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id = "@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<android.support.v4.view.PagerTabStrip
    android:layout_width="match_parent"
    android:layout_height = "40dp"
    android:paddingTop = "4dp"
    android:paddingBottom = "10dp"
    android:layout_gravity = "top"
    android:id = "@+id/pagerStrip">

</android.support.v4.view.PagerTabStrip>

</android.support.v4.view.ViewPager>

fragment_countries.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" tools:context="myapps.countryapp.Countries">

<!-- TODO: Update blank fragment layout -->


 <ListView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:id="@+id/MyListView">
  </ListView>

</FrameLayout>

解决方案

Ok, here is my example of activity, viewpager and fragment:

activity:

public class KataloziSlike extends AppCompatActivity {


    private AdapterCustomPage mAdapterCustomPage;
    private ViewPager mViewPager;
    private TextView tv, brojStranica;
    private ImageButton settings, share, locirajMe, back;

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

        if (Static.katalozi.getSlikeKataloga().size() == 1) {
            Message.message(KataloziSlike.this, "Katalog ima samo jednu stranu");
        }
        brojStranica = (TextView) findViewById(R.id.tvBrojStranicaKataloga);
        brojStranica.setText(String.valueOf(1) + "/" + String.valueOf(Static.katalozi.getSlikeKataloga().size() + 1));

        mAdapterCustomPage = new AdapterCustomPage(getFragmentManager(), this);
        mViewPager = (ViewPager) findViewById(R.id.view_pagerZaSlikeKataloga);
        mViewPager.setAdapter(mAdapterCustomPage);
        mViewPager.setCurrentItem(0);


        mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {

                if (Static.katalozi.getSlikeKataloga().size() != 1) {
                    if (position == 0) {
                        Message.message(KataloziSlike.this, "Na prvoj stranici kataloga ste");
                    } else if (position == Static.katalozi.getSlikeKataloga().size() - 1) {
                        Message.message(KataloziSlike.this, "Na poslednjoj stranici kataloga ste");
                    }
                }

                if (position <= Static.katalozi.getSlikeKataloga().size() - 1) {
                    YourFragmentInterface fragment = (YourFragmentInterface) mAdapterCustomPage.instantiateItem(mViewPager, position);
                    if (fragment != null) {
                        fragment.fragmentBecameVisible();
                    }
                }

                brojStranica.setText(String.valueOf(position + 1) + "/" + String.valueOf(Static.katalozi.getSlikeKataloga().size() + 1));
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
}
}

adapter:

public class AdapterCustomPage extends FragmentStatePagerAdapter {

    protected Context mContext;
    int maxBrojStrana = Static.katalozi.getSlikeKataloga().size();
    int pozicija;
    private ArrayList<Katalozi> mKatalozi;

    public AdapterCustomPage(FragmentManager fm, Context context) {
        super(fm);
        mContext = context;
    }




    @Override
    public Fragment getItem(int position) {

        // Create fragment object
        if (position == maxBrojStrana) {
            Fragment fragment = new ImageFragmentMapKatalozi();
            return fragment;
        } else {
            Fragment fragment = new ImageFragmentKatalozi();
            fragment.onPause();
            Bundle args = new Bundle();
            Log.i("Poizicija", String.valueOf(position));
            String url = Static.katalozi.getSlikeKataloga().get(position);
            args.putString("url", url);

            fragment.setArguments(args);


            String link = Static.katalozi.getUrl();
            args.putString("linkKataloga", link);




            return fragment;
        }

    }


    @Override
    public int getItemPosition(Object object) {
        pozicija = super.getItemPosition(object);
        return super.getItemPosition(object);
    }

    @Override
    public int getCount() {
        return maxBrojStrana + 1;
    }

}

and fragment:

public class ImageFragmentKatalozi extends Fragment implements KataloziSlike.YourFragmentInterface {


    private PhotoViewAttacher mAttacher;
    private ImageView imageView;
    private Bundle args;
    private Button button;

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

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

        args = getArguments();
        imageView = (ImageView) rootView.findViewById(R.id.imageViewAdapterZaListanjeKataloga);


        Callback imageLoadedCallback = new Callback() {

            @Override
            public void onSuccess() {
                if (mAttacher != null) {
                    mAttacher.update();
                } else {
                    mAttacher = new PhotoViewAttacher(imageView);

                }
            }

            @Override
            public void onError() {
                // TODO Auto-generated method stub

            }
        };

        Picasso.with(getActivity()).load(args.getString("url")).placeholder(R.drawable.load).error(R.drawable.error).into(imageView, imageLoadedCallback);
        mAttacher = new PhotoViewAttacher(imageView);
        button = (Button) rootView.findViewById(R.id.zaProveru);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });


        return rootView;
    }


    @Override
    public void onResume() {
        super.onResume();
        Toast.makeText(getActivity(), "sadsadasd", Toast.LENGTH_SHORT);
    }


    @Override
    public void fragmentBecameVisible() {
        mAttacher.update();
    }
}

What is problem with yours is that it isnt instatiated when first fragment is made, only when you swipe(on fragment change) then its showing. Reffer to my example

这篇关于文本不显示在ViewPager的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆