Android列表视图中的卡片翻转

时间:2013-07-16 23:07:18

标签: android android-fragments viewflipper

我需要创建一个列表视图。这应该是一个自定义列表,因为我希望列表中的每个项目都是图像视图,当触摸翻转时显示详细信息。

我正在根据android参考调查Card Filp视图(使用片段),但我觉得我错过了一些非常关键的东西,因为这感觉不对。下面是我的自定义适配器的代码,它将显示正面。我对如何翻转视图有另一个疑问。不幸的是,andrdoid教程不是很有帮助

public class CustomCardAdapter extends ArrayAdapter<String> {

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

    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 = mInflater.inflate(textViewResourceId, parent);

        fm.beginTransaction()
          .add(R.id.rowItem, new CardFrontFragment())
          .commit();

        String frontText = list.get(position);
        String bsckText = frontText+"...back side";

        TextView tvFront = (TextView)rowView.findViewById(R.id.frontSide);


        tvFront.setText(frontText);

        return rowView;
    }



}

/这只会显示,如果这项工作,前卡片段。如何“翻转”视图?这是通过附加onClickListner。

有没有人遇到过这个问题?任何帮助都会很棒!

请指教?

1 个答案:

答案 0 :(得分:0)

要理解该怎么做,我会做一个简单的例子,在没有任何片段和FragmentManager的情况下翻转视图。 然后适配器中的getView方法如下所示:

@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 = mInflater.inflate(textViewResourceId, parent);

    String frontText = list.get(position);
    String backText = frontText+"...back side";

    TextView tvFront = (TextView)rowView.findViewById(R.id.frontSide);
    tvFront.setText(frontText);
    // set View visible
    tvFront.setVisibility(View.VISIBLE);

    TextView tvBack = (TextView)rowView.findViewById(R.id.backSide);
    tvBack.setText(backText);
    // disable visiblity of view
    tvBack.setVisibility(View.GONE);

    // add both textViews to your row:
    rowView.removeAllViews();
    rowView.addView(tvFront);
    rowView.addView(tvBack);

    // now set a clickListener to your row
    rowView.setOnClickListener(new MyFlipListener(tvFront, tvBack));
    return rowView;
}

class MyFlipListener implements OnClickListener{

    TextView mTvFront;
    TextView mTvBack;

    public MyFlipListener(TextView tvFront, TextView tvBack){
        mTvFront = tvFront;
        mTvBack = tvBack;
    }

    @Override
    public void onClick(){
         // check which text is actually shown and make your changes
         if(mTvFront.isVisible){
              mTvFront.setVisibility(View.GONE);
              mTvBack.setVisibility(View.VISIBLE);
         }else{
              mTvFront.setVisibility(View.VISIBLE);
              mTvBack.setVisibility(View.GONE);
         }
    }

}

要使用你的碎片我会用同样的方法:

  • 首先将每个rowItem添加到CardFrontFragment
  • 然后向您的rowItem添加一个调用flipCard()
  • 的clickListener

我在这里看到的问题是你需要为每个listItem一个唯一的id,否则你的FragmentManager不知道必须翻转哪个CardFrontFragment(该示例只显示一个CardFrontFragment和CardBacktFragment - 但是你有多个CardFrontFragment和CardBackFragment)。 几个星期前,我尝试了类似GridView的东西。但它对我不起作用,所以我采取其他解决方案的意见。

我希望这会对你有所帮助:)。