我必须单击两次按钮才能使其正常工作

时间:2014-07-14 19:23:41

标签: android button android-viewpager

我有一个veiwpager,有(比如5个)页面,每个页面都有一个textview。我还有一个按钮来更改文本的文本大小。代码工作,但我必须单击按钮两次才能使其工作。

我研究并发现第一次按钮聚焦所以我也尝试将android:focusableInTouchMode =“false”添加到我的按钮xml布局,但同样的事情正在发生。我不知道为什么它会像这样。

我认为这可能是因为我正在使用veiwpager所以视图已经实例化,并且在我点击按钮后,一旦第一页上的文字没有改变,但是当我滑动到第三页时,我可以看到更改。

我尝试了一切,现在我失去了道德。请有人花5分钟时间告诉我这里我做错了什么。

这是我的代码:

public class MainActivity extends Activity {

TextView tv,situation;
int recsize;
ViewPager viewPager;
SlideSrt adapter;

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

    Button size = (Button) findViewById(R.id.button1);


     viewPager = (ViewPager) findViewById(R.id.view_pager);

     adapter = new SlideSrt(this);
    viewPager.setAdapter(adapter);

    size.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            situation.setTextSize(30);
            viewPager.getAdapter().notifyDataSetChanged();

            recsize =1;
        }
    });

}


 private class SlideSrt extends PagerAdapter {
        Context context;
        LayoutInflater inflater;


        String s1 = "Text1";
        String s2 = "Text2";
        String s3 = "Text3";
        String s4 = "Text4";
        String s5 = "Text5";

        String allsrt[] = {s1,s2,s3,s4,s5};

        SlideSrt(Context context) {
            this.inflater = (LayoutInflater)   context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        }

        @Override
        public int getCount() {
            return allsrt.length;
        }

        public int getItemPosition(Object object) {
            return POSITION_NONE;
        }
    @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == ((RelativeLayout) object);
        }

        public Object instantiateItem(ViewGroup container, int position) {


            View itemview;
            itemview = inflater.inflate(R.layout.pager, container, false);
            situation = (TextView) itemview.findViewById(R.id.textView1);


          situation.setText("position: "+position);

          if (recsize == 1){
                situation.setTextSize(30);
          }

            ((ViewPager) container).addView(itemview,0);

            return itemview;

        }
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            ((ViewPager) container).removeView((View) object);

        }
    }

}

2 个答案:

答案 0 :(得分:1)

试试这个:

设置recsize =1;

致电之前

viewPager.getAdapter().notifyDataSetChanged();

答案 1 :(得分:1)

是的,问题是viewpager。它至少创建一个页面取决于offScreenLimit,所以当你在第0页时,它可能已经加载了第1页,你的情境变量将指向内存中第二页的textView。因此增加了该页面的大小而不是当前页面。

解决方案 - 将int设置为textsize的默认值,在onclickListener中将deafult值更改为30.为寻呼机设置onPageChangeListener。在实例化方法本身内定义情境变量,为R.id.textView1设置一些标记值。在onPageSelected方法onPagechangeListener检查textize的默认值是否已更改为30,从寻呼机findViewByTag(R.id.textView1)将其转换为textView并设置该textView的大小。