使用viewPager进行按钮活动?

时间:2012-02-01 16:49:20

标签: android android-layout button android-viewpager

请不要评判我,我在android开发方面非常新...我想用viewPager创建一个应用程序...我有三个页面有三种不同的布局...但我不能弄清楚如何处理viewPager上第二页上的按钮。我发现了这个问题“How to write button onClick method in 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(int)未定义新类型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>

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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);

答案 2 :(得分:0)

在回答您最近的问题时,您可以在适配器之外和活动中设置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));
}

如果不是这样,请告诉我们错误,以便我们引导您朝着正确的方向前进。