我需要创建一个列表视图的视图。这应该是一个自定义列表,因为我希望列表中的每个项目都是一个图像视图,触摸时会翻转以显示详细信息。
我正在根据 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;
}
}
/如果这有效的话,这只会显示前面的卡片片段。我如何“翻转”视图?这是通过附加 onClickListener 来实现的吗?
有人遇到过这个问题吗?任何帮助都会很棒!
请指教?
为了理解要做什么,我将制作一个简单的示例来翻转视图,而无需任何片段和 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
- 然后向您的行项目添加一个调用 FlipKart() 的单击侦听器
我在这里看到的问题是,您需要为每个 listItem 提供一个唯一的 id,否则您的 FragmentManager 不知道必须翻转哪个 CardFrontFragment(该示例仅显示一个 CardFrontFragment 和 CardBacktFragment - 但是您有多个 CardFrontFragment 和 CardBackFragment)。
几周前,我尝试使用 GridView 进行类似的操作。但它对我不起作用,所以我采用了其他解决方案和视图。
我希望这能帮到您 :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)