2

我需要制作一个视图,它是一个列表视图。这应该是一个自定义列表,因为我希望列表中的每个项目都是一个图像视图,当触摸它时会翻转以显示细节。

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

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 来实现吗?

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

请指教?

4

1 回答 1

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);
         }
    }

}

要使用您的片段,我将使用相同的方式:

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

我在这里看到的问题是每个 listItem 都需要一个唯一的 id,否则您的 FragmentManager 不知道必须翻转哪个 CardFrontFragment(该示例仅显示一个 CardFrontFragment 和 CardBacktFragment - 但是您有多个 CardFrontFragment 和 CardBackFragment)。几周前,我尝试使用 GridView 进行类似的操作。但这对我不起作用,所以我采用了其他解决方案。

我希望这能帮到您 :)

于 2013-07-18T06:06:24.270 回答