0

我需要开发一个 ListView,其中项目是一个片段(FRONT),单击它会翻转到另一个片段(BACK)。

我制作了一个自定义适配器,我在其中使用片段填充列表的每个项目(在 getView 中)。单击后,我将用后视图替换前视图。如果只有一个项目开始随机运行,这是可以理解的,当 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

为什么不将两个片段作为一行的框架布局,而是将可见性设置为不可见/可见,然后执行动画?

于 2013-07-19T02:37:07.557 回答
0

也许您应该使用 onListItemClick 而不是 onClick。

如果它正在工作,但总是翻转最顶部的项目,则 onClick 侦听器一定不能识别列表项,而是列表视图。

我没有在代码中尝试过这个,到目前为止这只是一个建议。

于 2013-07-19T14:32:15.563 回答
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 回答