Кнопка деятельности с ViewPager?

голоса
4

Пожалуйста , не судите меня, я очень новый на андроид развивающихся ... Я хочу сделать приложение с ViewPager ... У меня есть три страницы с тремя различными раскладками ... Но я просто не мог понять, как иметь дело с кнопкой на второй странице на ViewPager. Я нашел этот вопрос « Как написать кнопку OnClick метод в ViewPager? » И установить свои коды , как это:

ViewPagerAdapter:

@Override
public Object instantiateItem( View pager, int position )
{
    View v = new View(pager.getContext());
    LayoutInflater inflater =
            (LayoutInflater) pager.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    int resId = 0;
    switch (position) {
    case 0:         
        resId = R.layout.deneme;            
        break;
    case 1:
        resId = R.layout.deneme2;          
        break;
    case 2:
        resId = R.layout.deneme3;
        break;   
    }

    v = inflater.inflate(resId, null);
    ((ViewPager) pager).addView(v, 0);

    return v;
  }

Здесь я получаю сообщение об ошибке: «Метод findViewById (целое) не определено для типа нового View.OnClickListener () {}» на линии

 LinearLayout l = (LinearLayout) findViewById(R.id.layout2); 

и «GetResources () метод не определен для типа нового View.OnClickListener () {}» на линии

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

Главный:

 public class ViewPagerProjectActivity extends Activity {

 Button btn;
 View deneme2lout;

@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);      
    btn = (Button) deneme2lout.findViewById(R.id.button1);

}

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

 }

Итак, как я получаю, я не могу использовать эти два кода ... Так как я должен это делать? Мне нужно изменить фон второй страницы при нажатии на кнопку на втором макете.

А вот мои deneme2.xml коды:

<?xml version=1.0 encoding=utf-8?>
<AbsoluteLayout xmlns:android=http://schemas.android.com/apk/res/android
    android:id=@+id/layout2
    android:layout_width=match_parent
    android:layout_height=match_parent
    android:orientation=vertical >

    <Button
        android:id=@+id/button1
        android:layout_width=175dp
        android:layout_height=95dp
        android:layout_x=69dp
        android:layout_y=174dp
        android:textSize=25dp
        android:text=Change />

</AbsoluteLayout>
Задан 01/02/2012 в 17:49
источник пользователем
На других языках...                            


3 ответов

голоса
2

Что касается второй части вашего вопроса, это просто! Хотя вы теперь использовать 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;

Таким образом, изменяя следующие биты должны заставить его работать идеально:

  • Изменение View v = new View(pager.getContext());вView v = null;
  • Изменение окончательной инфляции (как раз перед добавлением вида) к if (v == null) v = inflater.inflate(resId, null);
Ответил 02/02/2012 в 02:13
источник пользователем

голоса
2

Это потому, что, как он объясняет, OnClickListener не имеет этих двух методов, которые вы используете внутри OnClickListener. Заменить:

LinearLayout l = (LinearLayout) findViewById(R.id.layout2);

с

LinearLayout l = (LinearLayout) v.findViewById(R.id.layout2);

если он тогда говорит v должен быть окончательным, что должно быть в порядке. И заменить:

getResources().getDrawable(R.drawable.background)

с

ViewPagerAdapter.this.context.getResources().getDrawable(R.drawable.background)
Ответил 01/02/2012 в 19:28
источник пользователем

голоса
0

В ответ на ваш самый последний вопрос, вы можете установить слушатель OnClick вне адаптера и в деятельности, как это:

public void buttonClick(View v) {
    //do something

}

В вашем XML, содержащий кнопку, убедитесь, что у вас есть андроид: OnClick = «ButtonClick», как 1 из свойств.

В вашем XML, содержащий кнопку, убедитесь, что у вас есть андроид: OnClick = «ButtonClick», как 1 из свойств.

Edit - Я не думаю , что вы применили изменения , которые я предложенные из вашего последнего кода ... вот что я имел в виду:

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

Если это не так, то пожалуйста, дайте нам знать об ошибке, чтобы мы могли привести вас в правильном направлении.

Ответил 02/02/2012 в 20:46
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more