Android 使用viewPager的按钮活动?

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(

请不要评判我,我对android开发非常陌生。。。我想用viewPager制作一个应用程序。。。我有三个页面,有三种不同的布局。。。但我就是不知道如何处理viewPager第二页上的按钮。我发现了这个问题“”,并将代码设置为:

ViewPagerAdapter:

这里我得到了一些错误: 第行的类型new View.OnClickListener(){}未定义findViewById(int)方法

第行的“类型new View.OnClickListener(){}的方法getResources()未定义”

主要内容:

所以我不能用这两个密码。。。那我该怎么做呢?当我点击第二个版面上的按钮时,我需要更改第二个页面的背景

下面是我的deneme2.xml代码:


这是因为,正如它所解释的,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)

为了回答您最近的问题,您可以在适配器外部和活动内部设置onClick侦听器,如下所示:

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));
}