【问题标题】:android change textView within a ViewPagerandroid在ViewPager中更改textView
【发布时间】:2014-02-19 23:09:04
【问题描述】:

我无法在 ViewPager 中设置 TextView 的 setText()。 这是我的主要活动课。我想在 ViewPager 制作的布局滑动中更新 textView。

public class MainActivity extends Activity {

    ViewPager myPager;

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

        MyPagerAdapter adapter = new MyPagerAdapter();
         myPager = (ViewPager) findViewById(R.id.myfivepanelpager);
         myPager.setAdapter(adapter);
         myPager.setCurrentItem(3);


    }

    @Override
    protected void onResume() {
        super.onResume();

         // this code causes the app to crash, because baseLayout is null
        View baseLayout = myPager.findViewWithTag(R.layout.hoteladdress);
        //TextView bubu = (TextView) baseLayout.findViewById(R.id.bubu);
        //bubu.setText("TEST");

    }




    private class MyPagerAdapter extends PagerAdapter {

        public int getCount() {
            return 3;
        }

        public Object instantiateItem(View collection, int position) {

            LayoutInflater inflater = (LayoutInflater) collection.getContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);




            int resId = 0;
            switch (position) {
            case 0: 
                resId = showHotelContact();             
                break;
            case 1:
                resId = showHotelAddress();         
                break;              
            case 2:     
                resId = showHotelMap();             
                break;      
            }



            View view = (View) inflater.inflate(resId, null);

            view.setTag(resId);

            ((ViewPager) collection).addView(view, 0);
            return view;
        }



     }   
    public int showHotelMap()
    {
        int resId;
        resId = R.layout.hotelmap;
        return resId;
    }
    public int showHotelAddress()
    {
        int resId;
        resId = R.layout.hoteladdress;
        return resId;
    }
    public int showHotelContact()
    {
        int resId;
        resId = R.layout.hotelcontact;
        return resId;
    }


}

请在 onResume 方法中找到我注释的行来解释问题。

【问题讨论】:

    标签: android textview android-viewpager


    【解决方案1】:

    这是经过测试和工作的。

    我已将这 3 个视图实现为 TextViews,但可以是任何布局,然后您只需进行相应的更改。

    public class MainActivity extends Activity {
    
        ViewPager myPager;
        MyPagerAdapter adapter;
    
        @Override protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            adapter = new MyPagerAdapter(getLayoutInflater());
            myPager = (ViewPager) findViewById(R.id.myfivepanelpager);
            myPager.setAdapter(adapter);
            adapter.notifyDataSetChanged();
        }
    
        @Override protected void onResume() {
            super.onResume();
    
            TextView hotelAddressView = adapter
                    .getViewAtPosition(MyPagerAdapter.POSITION_ADDRESS);
            hotelAddressView.setText("modified");
    
        }
    
        private class MyPagerAdapter extends PagerAdapter {
    
            public static final int POSITION_MAP = 0;
            public static final int POSITION_ADDRESS = 1;
            public static final int POSITION_CONTACT = 2;
    
            private TextView hotelMapView = null;
            private TextView hotelAddressView = null;
            private TextView hotelContactView = null;
    
            public MyPagerAdapter(LayoutInflater inflater) {
    
                hotelMapView = (TextView) inflater.inflate(R.layout.hotelmap, null);
                hotelAddressView = (TextView) inflater.inflate(
                        R.layout.hoteladdress, null);
                hotelContactView = (TextView) inflater.inflate(
                        R.layout.hotelcontact, null);
            }
    
            public int getCount() {
                return 3;
            }
    
            public TextView getViewAtPosition(int position) {
                Log.d("Main", "getViewAtPosition " + position);
                TextView view = null;
                switch (position) {
                case POSITION_MAP:
                    view = hotelMapView;
                    break;
                case POSITION_ADDRESS:
                    view = hotelAddressView;
                    break;
                case POSITION_CONTACT:
                    view = hotelContactView;
                    break;
                }
    
                return view;
            }
    
            public Object instantiateItem(ViewGroup collection, int position) {
    
                View view = getViewAtPosition(position);
    
                ((ViewPager) collection).addView(view, 0);
    
                return view;
            }
    
            @Override public void destroyItem(ViewGroup collection, int position,
                    Object view) {
                ((ViewPager) collection).removeView((TextView) view);
            }
    
            @Override public boolean isViewFromObject(View view, Object object) {
                return view == ((TextView) object);
            }
    
        }
    }
    

    【讨论】:

    • 谢谢,但未定义 resId 且未为 ViewPager 对象定义 getViewAtPosition()
    • 我的错,正如我所说,它未经测试:) 立即尝试
    • 不想建立一个新的测试项目添加布局和所有,我也很确定这个想法是有效的。只是想为您指明方向。
    • 花时间设置一个测试项目。更新后的答案对我有用。
    • 谢谢,今晚我会尝试并标记为答案。
    猜你喜欢
    • 2014-09-30
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多