Android 使用viewPager的按钮活动?
请不要评判我,我对android开发非常陌生。。。我想用viewPager制作一个应用程序。。。我有三个页面,有三种不同的布局。。。但我就是不知道如何处理viewPager第二页上的按钮。我发现了这个问题“”,并将代码设置为: ViewPagerAdapter: 这里我得到了一些错误: 第行的类型new View.OnClickListener(){}未定义findViewById(int)方法 第行的“类型new View.OnClickListener(){}的方法getResources()未定义” 主要内容: 所以我不能用这两个密码。。。那我该怎么做呢?当我点击第二个版面上的按钮时,我需要更改第二个页面的背景 下面是我的deneme2.xml代码:Android 使用viewPager的按钮活动?,android,android-layout,button,android-viewpager,Android,Android Layout,Button,Android Viewpager,请不要评判我,我对android开发非常陌生。。。我想用viewPager制作一个应用程序。。。我有三个页面,有三种不同的布局。。。但我就是不知道如何处理viewPager第二页上的按钮。我发现了这个问题“”,并将代码设置为: ViewPagerAdapter: 这里我得到了一些错误: 第行的类型new View.OnClickListener(){}未定义findViewById(int)方法 第行的“类型new View.OnClickListener(){}的方法getResources(
这是因为,正如它所解释的,OnClickListener没有在OnClickListener中使用的这两种方法。替换:
LinearLayout l = (LinearLayout) findViewById(R.id.layout2);
与
如果它说v应该是最终的,那应该没问题。并替换:
getResources().getDrawable(R.drawable.background)
与
至于你问题的第二部分,很简单!尽管您现在一直使用View
v
,但您仍然会在末尾使用新的通货膨胀“覆盖”它:
int resId = 0;
switch (position) {
case 0:
resId = R.layout.deneme;
break;
case 1:
resId = R.layout.deneme2;
// Inflate v the first time
v = inflater.inflate(R.layout.deneme2, null, false);
@SuppressWarnings("deprecation")
final AbsoluteLayout l = (AbsoluteLayout) v.findViewById(R.id.layout2);
// Add the OnClickListener to the button, which is associated with the above instance of v
btn = (Button) v.findViewById(R.id.button1);
btn.setOnClickListener( new OnClickListener() {
public void onClick(View m) {
l.setBackgroundResource(R.drawable.background);
}
});
break;
case 2:
resId = R.layout.deneme3;
}
// Overwrite the instance of v with the OnClickListener with one without the OnClickListener
v = inflater.inflate(resId, null);
((ViewPager) pager).addView(v, 0);
return v;
因此,更改以下位应能使其完美工作:
- Change
View v=新视图(pager.getContext())代码>到
视图v=null代码>
- 将最终充气(添加视图之前)更改为
if(v==null)v=inflater.inflate(resId,null)代码>
public void buttonClick(View v) {
//do something
}
在包含按钮的xml中,确保将android:onClick=“buttonClick”作为属性之一
在包含按钮的xml中,确保将android:onClick=“buttonClick”作为属性之一
编辑--
我认为您没有应用我从您最近的代码中建议的更改。。。以下是我的想法:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ViewPagerAdapter adapter = new ViewPagerAdapter( this );
ViewPager pager = (ViewPager)findViewById( R.id.viewpager );
pager.setAdapter( adapter );
pager.setCurrentItem(0);
LayoutInflater getView = getLayoutInflater();
deneme2lout = (View) getView.inflate(R.layout.deneme2,null);
}
public void buttonClick(View v) {
deneme2lout.setBackgroundDrawable(getResources().getDrawable(R.drawable.background));
}
如果不是这样,那么请让我们知道错误,以便我们可以引导您走向正确的方向。谢谢,它成功了=)但是现在,我在这一行得到了NullPointerException:btn.setOnClickListener(…);那可能是因为我和button的布局不一样。。。但我想不出如何修复它。。。有什么建议吗?嗯,你还在使用视图
v
,所以应该没问题。。。你确定按钮1和布局2存在于该布局中?此外,您的代码当前实际上并没有添加视图v
,而将OnClickListener设置为页面,它会添加视图View
。尝试更改它,使其在顶部案例中添加v
,在底部两个案例中添加view
,然后查看它是否有效。你是对的:)我已经做了你提到的更改,现在它没有给出任何错误。。。但是点击它也不会改变背景:/我还应该做什么?(很抱歉打扰您这么多,但正如我所说,我对android非常陌生)不用担心!我现在不明白为什么它不起作用。你能用你现在拥有的更新问题中的所有代码,并发布你的deneme.xml文件(或任何包含layout2的文件)吗?嗯,这真的很奇怪,因为我仍然不明白为什么它不能工作。尝试更改l.setBackgroundDrawable(ViewPagerAdapter.this.context.getResources().getDrawable(R.drawable.background))代码>至l.setBackgroundResource(R.drawable.background)代码>,应该没有什么区别,但你永远不会知道!谢谢!工作起来很有魅力!=)但我可以问一下,是否有办法处理主课中的按钮点击,而不是PagerAdapter中的按钮点击?你能检查一下我的答案吗?我把我的代码按你说的重新排序。。。但是仍然不起作用。我假设您仍然有问题,因为您在if语句中遇到了NullPointer异常。您不需要在buttonClick方法中添加if语句来检查视图是否是btn(它是冗余的)。如果有人单击按钮,将调用buttonClick方法。因此,我认为deneme2lout.setBackgroundDrawable(R.drawable.background);应该没问题。让我知道它是否有效。我试过了,但没有成功。。。我编辑我的代码,你可以在那里查看。。。提前谢谢!诺普,没有解决。。。它没有给出任何错误,但onclick也不起作用。谢谢你的代码帮助我。很高兴听到它:)@Kedarnath
LinearLayout l = (LinearLayout) findViewById(R.id.layout2);
LinearLayout l = (LinearLayout) v.findViewById(R.id.layout2);
getResources().getDrawable(R.drawable.background)
ViewPagerAdapter.this.context.getResources().getDrawable(R.drawable.background)
int resId = 0;
switch (position) {
case 0:
resId = R.layout.deneme;
break;
case 1:
resId = R.layout.deneme2;
// Inflate v the first time
v = inflater.inflate(R.layout.deneme2, null, false);
@SuppressWarnings("deprecation")
final AbsoluteLayout l = (AbsoluteLayout) v.findViewById(R.id.layout2);
// Add the OnClickListener to the button, which is associated with the above instance of v
btn = (Button) v.findViewById(R.id.button1);
btn.setOnClickListener( new OnClickListener() {
public void onClick(View m) {
l.setBackgroundResource(R.drawable.background);
}
});
break;
case 2:
resId = R.layout.deneme3;
}
// Overwrite the instance of v with the OnClickListener with one without the OnClickListener
v = inflater.inflate(resId, null);
((ViewPager) pager).addView(v, 0);
return v;
public void buttonClick(View v) {
//do something
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ViewPagerAdapter adapter = new ViewPagerAdapter( this );
ViewPager pager = (ViewPager)findViewById( R.id.viewpager );
pager.setAdapter( adapter );
pager.setCurrentItem(0);
LayoutInflater getView = getLayoutInflater();
deneme2lout = (View) getView.inflate(R.layout.deneme2,null);
}
public void buttonClick(View v) {
deneme2lout.setBackgroundDrawable(getResources().getDrawable(R.drawable.background));
}