按钮的onClick事件不起作用。

5

我制作了一个ViewPager,每个页面上都有三个布局...我想处理第二页上的一个按钮,但是不知道为什么不能...(附注:没有按钮代码,我的ViewPager可以正常工作)我只是简单地尝试在点击时更改背景...

这是我的代码:

public class ViewPagerProjectActivity extends Activity implements OnClickListener{

Button btn;

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


}


public void OnClick(View v) {
    if(v.equals(btn)) {
    LinearLayout l = (LinearLayout) findViewById(R.id.deneme2);
            l.setBackgroundDrawable(getResources().getDrawable(R.drawable.background));
    }       
}    
}

以下是错误信息:

E/AndroidRuntime(273): FATAL EXCEPTION: main
E/AndroidRuntime(273): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.yahya.ViewPagerProject/com.yahya.ViewPagerProject.ViewPagerProjectActivity}: java.lang.ClassCastException: com.yahya.ViewPagerProject.ViewPagerProjectActivity
E/AndroidRuntime(273):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
E/AndroidRuntime(273):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
E/AndroidRuntime(273):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)

你的ViewPager布局文件中有什么? - Jivings
在每个布局上都有一些不同的东西... 在第二个布局上只有一个按钮,我想要点击它。 - yahya
什么是行号?你可能需要将其改为LinearLayout l =(LinearLayout)ViewPagerProjectActivity.this.findViewById(R.id.layout1); - Hiral Vadodaria
请发布您的布局文件。 - Akram
meltemyldrim 给出的答案解决了问题,不过还是谢谢。 - yahya
7个回答

11

尝试使用以下代码行,希望它能够正常工作...

View deneme2lout = (View) getView.inflate(R.layout.deneme2,null);
btn = (Button) deneme2lout.findViewById(R.id.button1);
btn.setOnClickListener(this);

2

尝试使用以下方法:

public class ViewPagerProjectActivity extends Activity {

Button btn;

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

    LinearLayout l = (LinearLayout) findViewById(R.id.layout1);
    btn = (Button) findViewById(R.id.button1);    
    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {               

             l.setBackgroundDrawable(getResources().getDrawable(R.drawable.background));
        }
    });
}

我仍然得到NullPointerException...我想不出为什么? :/ - yahya
你试过将我在答案中给出的整段代码完整地使用吗?不要像你在问题中那样在onCreate()外使用onClicl()。 - Hiral Vadodaria
是的,我确实这样做了... 仍然给我那个。 - yahya
奇怪!这不应该发生。使用这段代码,您不需要实现onClickListener。如果您已经这样做了,请将其删除。但我认为您已经得到了答案,所以现在没有问题了! - Hiral Vadodaria
除了“NullPointerException”之外,是的,我得到了我的答案。谢谢。 - yahya
显示剩余5条评论

1
> btn.setOnClickListener((OnClickListener) this);

这个不起作用是因为 ViewPagerProjectActivity 没有实现所需的 implements OnClickListener 接口。

你说得对,我刚刚忘了它...但现在已经完成了,编译器在这一行"btn.setOnClickListener(this);"上给了我一个NullPointerException错误,但为什么? :/ - yahya

1

尝试

 public class ViewPagerProjectActivity extends Activity implements OnClickListener

 then btn.setOnClickListener(this); 

0

我认为这会对你有所帮助...

在Android中使用按钮...

将XML文件中的按钮映射到Java类文件中的Button,如下所示...

Button bt=(Button)findViewById(R.layout.button_id_in_your_xml);

接下来,请按以下方式调用按钮bt的onclickListener..

bt.setOnClickListener(new View.onClickListener(){

public void onClick(View arg0) {

    //write what you want to do when you click the button
}
);

0

当我向XML文件添加自定义UI元素时,我也遇到了这种问题。

我只是从XML文件中删除了该特定项,然后构建了项目,再将文件还原。问题得到解决。看起来很疯狂,但试一试吧。


0

当你尝试处理按钮的点击时,你有两个选项

  1. 在xml布局文件中,将android:onClick设置为类似"myButtonClick"的内容。然后在相关的Activity .java文件中,您将使用此布局,并拥有一个方法public void myButtonClick(View v)。 然后在这里放置您的逻辑。
  2. 在您的onCreate()中添加

    btn = (Button) findViewById(R.id.button1);  
    btn.setOnClickListener(new OnClickListener() {
    
      @Override
      public void onClick(View arg0) {               
    
         //Your logic here
      }
    });
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接