アイテムがフラグメント (FRONT) であり、クリックすると別のフラグメント (BACK) にフリップする ListView を開発する必要があります。
リストの各項目 (getView 内) にフラグメントを設定するカスタム アダプターを作成しました。クリックすると、FRONT ビューが BACK ビューに置き換えられます。これは、アイテムが 1 つしかない場合でも問題なく動作しますが、当然のことながら、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();
}
}
私を助けて、何を変更する必要があるか、またはこのコードの何が問題なのか教えてください。