如何获取适配器创建的所有视图实例?

3
我有一个针对 GridViewArrayAdapter。如您在代码中所看到的,我使用名为 GridViewCell 的自定义视图通过 getView 方法填充GridView
现在,在单击此自定义视图时,会运行一个名为 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();
    }
}

但是那并没有帮助我。这个怎么做呢?
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();
        }
    });

我会尝试这些选项。但目前我是从适配器的getView方法管理我的点击,而不是从gridView实例管理。难道没有其他方法可以获取子项的实例吗? - Emil Adz
据我所知,没有。但请等待其他答案。 - Blackbelt
好的,但基本上AdapterView是包含ArrayAdapter创建的所有子项的视图吗?感谢您的回答。 - Emil Adz

0

好的,这就是我最终做的事情。从包含GridView的片段中,我运行了这个方法,获取GridView的所有子项,并在每个子项上运行动画方法。

public void flipOtherChosenAnswer(int position) 
{
    int cellCount = gvQuestionAnswers.getChildCount();
    for (int i=0; i < cellCount; i++ )
    {
        if (i != position && qustionAnswersList.get(i).isChecked())
        {
            ((GridViewCell)gvQuestionAnswers.getChildAt(i)).FlipAnmiation();
        }
    }
}

1
嗯嗯嗯,这是一篇旧帖子,但是在 Blackbelt 给出正确答案后你还接受了自己的回复?很酷…… - Davide

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接