1

別のレイアウトを表示するために、タブホスト ( Android 2.1 と互換性がある必要があるため、FragmentManagers などはありません) 内でタブを左右にスライドさせる方法を探していました。ViewPager を使用した例はたくさんあるので、Tabhost を捨てて、このコードを実装することにしました。以下に、2 つの「画面」を使用するテスト コードをいくつか示します。ユーザーがクエリを入力したときにプログラムで画面を切り替え (ここでは screen1)、結果のページ (screen2) を表示できるようにする必要があります。ユーザーは、クエリ ページと結果ページの間を前後にスワイプすることもできます。

私が抱えている問題は、ボタンの onClickListener を実装する方法です。通常、これを screen1.java (以下) に実装しますが、ボタンをクリックしても onClickListener が制御されないようです。ViewPager が screen1 レイアウトを機能させる方法は、何らかの形で ViewPager オブジェクトにまとめられていると思います。画面 1 のボタンを取得するためにビューを膨張させようとしましたが、物事が乱雑になり、簡単ではありませんでした。

私が取り組んでいるのは、FlingActivity の ViewPager (myPager) の静的メンバー変数です。PagerAdapter から、screen1 がインスタンス化されたときに、onClickListener をボタン オブジェクトに設定し、ビューが膨張したときに、静的変数 FlingActivity.myPager を参照して、ボタンがクリックされた (ビューを変更した) ときに setCurrentItem() を実行できます。

事は、これはすべて本当に不器用に見えるということです。onClickListener を screen1.java クラスに戻すにはどうすればよいですか?

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
<android.support.v4.view.ViewPager
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/myfivepanelpager"/>
</LinearLayout>

screen1.xml

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

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <Button
        android:id="@+id/button1"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <CheckBox
        android:id="@+id/checkBox1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="CheckBox" />

</LinearLayout>

screen2.xml

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


    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <ImageView
        android:id="@+id/iv_2"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</LinearLayout>

screen1.java

package test.com.vfling;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class screen1 extends Activity
{
    private final String TAG = "** screen1 **";

    @Override
    protected void onCreate (Bundle savedInstanceState)
    {
        super.onCreate (savedInstanceState);

        Log.d (TAG, "oncreate");
        setContentView (R.layout.screen1);
    }

}

screen2.java

package test.com.vfling;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class screen2 extends Activity 
{
    private final String TAG = "** screen2 **";

    @Override
    protected void onCreate (Bundle savedInstanceState)
    {
         super.onCreate (savedInstanceState);
        Log.d (TAG, "oncreate");
        setContentView (R.layout.screen2);      
    }


}

MyPagerAdapter.java

package test.com.vfling;

import android.content.Context;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MyPagerAdapter extends PagerAdapter
{
    private String TAG = "** MyPagerAdapter **";

    @Override
    public int getCount ()
    {
        //Log.d (TAG, "getCount");
        return 2;
    }

    public Object instantiateItem (View collection, int position)
    {
        Log.d (TAG, "instantiateItem");

        LayoutInflater inflater = (LayoutInflater) collection.getContext ().getSystemService (Context.LAYOUT_INFLATER_SERVICE);
        int resId = 0;

        switch (position)
        {
            case 0:
                                resId = R.layout.screen1;
                                Log.d (TAG, "screen1");
            break;
            case 1:
                                resId = R.layout.screen2;                               
                                Log.d (TAG, "screen2");
            break;
        }

        View view = inflater.inflate (resId, null);
        ((ViewPager) collection).addView (view, 0);


        switch (position)
        {
            case 0:
                                Button b = (Button) view.findViewById (R.id.button1);
                                b.setOnClickListener (ocl);
                                Log.d (TAG, "screen1");
            break;
        }


        return view;
    }



    @Override
    public void destroyItem (View arg0, int arg1, Object arg2)
    {
        Log.d (TAG, "destroyitem");
        ((ViewPager) arg0).removeView ((View) arg2);
    }

    @Override
    public boolean isViewFromObject (View arg0, Object arg1)
    {
        Log.d (TAG, "isviewfromobject");
        return arg0 == ((View) arg1);
    }

    @Override
    public Parcelable saveState ()
    {
        return null;
    }


    OnClickListener ocl = new OnClickListener()
    {

        @Override
        public void onClick (View v)
        {
            switch (v.getId ())
            {
                        case R.id.button1:
                    Log.d (TAG, "button 1 click");
                        FlingActivity.myPager.setCurrentItem (1);
                        break;
            }

        }
    };
}

FlingActivity.java

package test.com.vfling;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.ViewPager;

public class FlingActivity extends Activity
{
    private final String TAG = "** test_vfling **";
    public static ViewPager myPager;

    @Override
    protected void onCreate (Bundle savedInstanceState)
    {
       super.onCreate (savedInstanceState);
       setContentView (R.layout.main);

       MyPagerAdapter adapter = new MyPagerAdapter ();
       myPager = (ViewPager) findViewById (R.id.myfivepanelpager);
       myPager.setAdapter (adapter);
       myPager.setCurrentItem (1);
    }
}
4

0 に答える 0