0

アイテムがフラグメント (FRONT) であり、クリックすると別のフラグメント (BACK) にフリップする ListView を開発する必要があります。

リストの各項目 (getView 内) にフラグメントを設定するカスタム アダプターを作成しました。クリックすると、FRONT ビューが BACK ビューに置き換えられます。これは、アイテムが 1 つしかない場合でも問題なく動作しますが、当然のことながら、onClick が常にリストの一番上のフラグメントを反転するため、複数のアイテムがある場合はランダムに動作し始めます。

リストの個々の項目を聞いて、識別し、フリップ アニメーションを実行する方法はありますか?

以下は、私が書いたカスタムアダプターのコードです

public class CustomCardAdapter extends ArrayAdapter<String> implements OnClickListener, OnBackStackChangedListener{

    private int textViewResourceId;
    private Context mContext;
    private List<String> list;
    private FragmentManager fm;

    private Handler mHandler;
    private boolean mShowingBack = false;


    public CustomCardAdapter(FragmentManager fm, Context context, int textViewResourceId, List<String> list) {
        super(context, textViewResourceId, list);
        mContext = context;
        this.textViewResourceId = textViewResourceId;
        this.list = list;
        this.fm = fm;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        LayoutInflater mInflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View rowView = convertView;

        if(rowView == null)
            rowView = mInflater.inflate(textViewResourceId, parent, false);

        rowView.setOnClickListener(this);
        rowView.setTag(String.valueOf(position));
        rowView.setId(position);


        fm.beginTransaction()
          .add(R.id.container, new CardFrontFragment(list.get(position)))
          .commit();

        fm.addOnBackStackChangedListener(this);

        return rowView;
    }

    @Override
    public void onClick(View v) {
        FlipCard(v);

    }



    @Override
    public void onBackStackChanged() {
        mShowingBack = (fm.getBackStackEntryCount() > 0);

    }

    private void FlipCard(View view){
        if(mShowingBack){
            fm.popBackStack(view.getTag().toString(),0);
            return;
        }

        mShowingBack = true;

        fm.beginTransaction()
            .setCustomAnimations(R.animator.card_flip_right_in, R.animator.card_flip_right_out
                                , R.animator.card_flip_left_in, R.animator.card_flip_left_out)
            .replace(R.id.container,new CardBackFragment("Advertise Here","describe here"))
            .addToBackStack(null)
            .commit();
    }
}

私を助けて、何を変更する必要があるか、またはこのコードの何が問題なのか教えてください。

4

3 に答える 3

0

ビュー階層に R.id.container ID を持つ複数のビューがあります。

電話すると

.replace(R.id.container,new CardBackFragment("Advertise Here","describe here"))

これにより、最初のビューが R.id.container ID、またはリストの最初のビューに置き換えられます...

ViewSwitcher または 2 つのビューを持つ FrameLayout を使用して、それらの間の遷移をアニメーション化することができます...

于 2013-07-21T02:55:53.170 に答える
0

両方のフラグメントを一列に並べたフレーム レイアウトを作成し、可視性を不可視/可視に設定してからアニメーションを実行してみませんか?

于 2013-07-19T02:37:07.557 に答える