我需要创建一个列表视图。这应该是一个自定义列表,因为我希望列表中的每个项目都是图像视图,当触摸翻转时显示详细信息。
我正在根据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。
有没有人遇到过这个问题?任何帮助都会很棒!
请指教?
答案 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);
}
}
}
要使用你的碎片我会用同样的方法:
我在这里看到的问题是你需要为每个listItem一个唯一的id,否则你的FragmentManager不知道必须翻转哪个CardFrontFragment(该示例只显示一个CardFrontFragment和CardBacktFragment - 但是你有多个CardFrontFragment和CardBackFragment)。 几个星期前,我尝试了类似GridView的东西。但它对我不起作用,所以我采取其他解决方案的意见。
我希望这会对你有所帮助:)。