3

コードでわかるように、ArrayAdapterメソッドを使用して、呼び出されたカスタム ビューを使用して を設定します。GridViewGridViewgetViewGridViewCell

このカスタム ビューをFlipAnimationクリックすると、クリックしたビューでうまく機能するメソッドが実行されます。私が達成したいのは、現在アダプターにある他のすべてのカスタム ビューに対して同じアニメーション メソッドを実行することです。そのため、他のすべてのビューのインスタンスを取得する必要があります (アダプターには 4 つのビューがあるため、インスタンスを取得する必要があります)。他の 3)。

public class AnswersGridAdapter extends ArrayAdapter<Answer>
{   
private static final String TAG = AnswersGridAdapter.class.getSimpleName();
private ArrayList<Answer> answersList;
private Context context;
private MainActivity activity;
private QuestionGridFragment fragment;
private View view;

public AnswersGridAdapter(QuestionGridFragment fragment, Context context, int textViewResourceId, ArrayList<Answer> answersList) 
{
    super(context, textViewResourceId, answersList);
     this.answersList = new ArrayList<Answer>();
     this.answersList.addAll(answersList);
     this.context = context;
     this.activity = (MainActivity)context;
     this.fragment = fragment;
}

public View getView(final int position, View convertView, ViewGroup parent)
{
    final View view = new GridViewCell(context);

    if (answersList.get(position).isChecked())
    {
        ((GridViewCell)view).FlipToBackWithoutAnimation();
    }

    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) 
        {
            ((GridViewCell)view).FlipAnmiation();
            if (answersList.get(position).isChecked())
            {
                answersList.get(position).setChecked(false);
            }
            else
            {
                answersList.get(position).setChecked(true);
            }

            activity.getEstimatedCostTextView().setText(String.valueOf(activity.getEstimatedCost()));
            fragment.flipOtherChosenAnswer(position);
        }
    });

    ((GridViewCell)view).setTextToTitleTextView(answersList.get(position).getAnswerText());
    return view;
}
}

私はこのようなことをしようとしていました:

public void flipOtherChosenAnswer(int position) 
{
    int cellCount = answersAdapter.getCount();
    for (int i=0; i < cellCount; i++ )
    {
            ((GridViewCell)answersAdapter.getView(i, null, null)).FlipAnmiation();
    }
}

しかし、それは私を助けませんでした。これはどのように行うことができますか?

4

2 に答える 2

4

でクリックを管理する場合onItemClick、最初の引数は AdapterView である必要があり、それを試してみると、その子にアクセスできます。

int count = adpaterViewInstance.getChildCount();
for (int i = 0; i < count; i++) {
   View childAt = adpaterViewInstance.getChildAt(i);
}

編集:

gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> adpaterViewInstance, View v, int position, long id) {
            Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show();
        }
    });
于 2013-10-27T09:21:14.047 に答える