我有一个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);
}
}
}
答案 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的大小。