Кнопка onClick в viewPager?

У меня есть viewPager, а на второй странице у меня есть кнопка. Я хочу, чтобы он что-то делал onClick, но он не делает.

Я сделал в XML-файле: android:onClick="buttonClick"

А также я пробовал setOnClickListener как внутри, так и снаружи onCreat...

Ни то, ни другое не получилось...

Мой 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));
    }
}

}


person yahya    schedule 14.02.2012    source источник


Ответы (1)


Я вижу несколько проблем с вашим кодом:

  1. Вы не должны ничего делать в onSaveInstanceState, кроме... сохранения состояния. onSaveInstanceState вызывается только тогда, когда действие должно быть приостановлено; он не будет вызываться до тех пор, поэтому присоединение слушателя ничего не даст. :(
  2. Вы не можете сделать btn.setOnClickListener(this), если ваш ViewPagerProjectActivity не реализует onClickListener. Таким образом, вы можете реализовать это или просто использовать код ниже.

Переместите этот код в onCreate после setContentView(R.layout.main):

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);
person Sam Dozor    schedule 14.02.2012
comment
Вы правы... Я сделал ошибку, это должно быть onWindowFocusChanged, а не onSaveInstanceState... Теперь это работает :) Кстати, он тоже разбился, как вы сказали... - person yahya; 14.02.2012