0

これは私のカスタム PageAdapterからのものです。

public Object instantiateItem(View collection, int position) {
    LayoutInflater inflater = (LayoutInflater) collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View view = null;
    switch (position) {
    case 0: view = dMngr.GetView(inflater); 
        break;
    case 1: view = mMngr.GetView(inflater); 
        break;
    case 2: view = cMngr.GetView(inflater); 
        break;
    }   
    ((ViewPager) collection).addView(view, 0);
    return view;
}

これはcMngr.GetViewコードです:

public View GetView(LayoutInflater inflater){
    View view = null;
    if (showCamDetail){
        view = inflater.inflate(R.layout.cam_view, null);
        ((Button)view.findViewById(R.id.button1)).setOnClickListener(myhandler2);
    } else {
        view = inflater.inflate(R.layout.cams_view, null);  
        ((ImageView)view.findViewById(R.id.imageView1)).setOnClickListener(myhandler);
    }
    return view;
}

View.OnClickListener myhandler = new View.OnClickListener() {
    public void onClick(View v) {
        showCamDetail = true;
        hPageAdapter.notifyDataSetChanged();
    }
};
View.OnClickListener myhandler2 = new View.OnClickListener() {
    public void onClick(View v) {
        showCamDetail = false;
        hPageAdapter.notifyDataSetChanged();
    }
};

このコードはlayout、最初のページにスワイプしてから 3 番目のページに戻ったときにのみ、3 番目のページで変更されます。またはlayoutをクリックした直後に変更する必要があります。ImageViewButton

4

1 に答える 1

0

2 つのビュー ステートの違いがそれほど複雑でない場合は、両方を同じレイアウトに含め、必要に応じてその一部を選択的に非表示/表示View.setVisibility(View.GONE)View.setVisibility(View.VISIBLE)ます。インフレーション後にレイアウトできるsetTag()ので、後で見つけやすくなりfindViewByTag()、可視性の変更を適用できます。

于 2013-04-08T10:55:10.733 に答える