在ViewPager中如何使用按钮的onClick事件?

3
我有一个名为viewPager的组件,在第二个页面里面有一个按钮。我想在点击时让它执行一些操作,但是无效。
我已经在xml文件中加入了 `android:onClick="buttonClick"` 的属性。
同时我还尝试过在onCreat方法的内外部设置setOnClickListener事件...
但是这些都没有起作用...
我的viewPagerAdapter运行良好! 我可以看到页面并在它们之间进行切换。但是我只是不能让按钮做任何事情。虽然它可以在适配器中完成,但我会做很多其他的事情,所以这不会有用...
感激任何帮助。
以下是代码:
public class ViewPagerProjectActivity extends Activity {

Button btn;
AbsoluteLayout l;

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

}   

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    l = (AbsoluteLayout) findViewById(R.id.layout2);
    btn = (Button) l.findViewById(R.id.button1);
    // btn.setOnClickListener(this);        
}

public void buttonClick(View v) {
    if(v.equals(btn)) {                 
        l.setBackgroundDrawable(getResources().getDrawable(R.drawable.background));
    }
}

}

1个回答

2

我发现你的代码有几个问题:

  1. onSaveInstanceState 方法中除了保存状态,你不应该做任何其他事情。 onSaveInstanceState 只在活动即将暂停时调用;在那之前它不会被调用,因此在其中添加监听器将不起作用。
  2. 如果你的 ViewPagerProjectActivity 没有实现 onClickListener 接口,就不能使用 btn.setOnClickListener(this)。所以你可以实现它,或者只需使用下面的代码。

将这段代码移到 setContentView(R.layout.main) 之后的 onCreate 中:

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

OnClickListener listener = new OnClickListener(){

@Override
public void onClick(View v) {
    v.setBackgroundDrawable(getResources().getDrawable(R.drawable.background));
}};
if (btn != null)
    btn.setOnClickListener(listener);

你说得对...我犯了一个错误,应该是“onWindowFocusChanged”而不是“onSaveInstanceState”...现在它可以工作了 :) 顺便说一下,用你说的方法也会崩溃... - yahya

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