我需要顶部开发一个ListView,其中item是一个片段(FRONT),点击后翻转到另一个片段(BACK)。
我已经制作了一个自定义适配器,我用片段填充列表中的每个项目(在getView中)。点击后,我正在用BACK视图替换FRONT视图。如果只有一个项目buut开始随机行为,这是正常的,当有多个项目时,可以理解,因为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();
}
}
请帮助我并告诉我需要更改哪些内容或此代码有什么问题?
答案 0 :(得分:0)
为什么不将两个片段作为一行进行帧布局,而是将可见性设置为不可见/可见,然后执行动画?
答案 1 :(得分:0)
也许代替onClick,你应该使用onListItemClick。
如果它正在工作,但总是翻转最顶层的项目,则onClick侦听器不能识别列表项,而是列表视图。
我还没有在代码中尝试过这个,到目前为止它只是一个建议。
答案 2 :(得分:0)
您在View层次结构中有多个带有R.id.container ID的视图。
致电时
.replace(R.id.container,new CardBackFragment("Advertise Here","describe here"))
这将用R.id.container ID或列表中的第一个View替换第一个View ...
我不认为片段是做你想要的最好的选择,你可以使用ViewSwitcher或只有2个视图的FrameLayout并在它们之间设置过渡动画......