确定在onItemClick上使用哪个适配器

时间:2013-08-14 10:33:30

标签: android android-listview android-arrayadapter baseadapter

我正在使用带有部分的ListView。我有一个ArrayAdapters列表,每个部分一个。 我需要在onItemClick上确定正确的适配器以在适配器中启动方法。 我如何获得对正确适配器的引用?

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
  long id)
{
  adapterList.get(x).toggleBought(position);
  //need to determine x (the x'th adapter in the list
  //or somehow get a reference to the adapter instead of adapterList.get(x)
}

以下是创建适配器列表的代码:

adapterList = new ArrayList<CartRowAdapter>();  //list of ArrayAdapters
oListAdapter = new CartListAdapter(getActivity()); //BaseAdapter
for (int i = 0; i < cartLists.size(); i++)
{
  adapterList.add(new CartRowAdapter(getActivity(), R.layout.cart_row,
  cartLists.get(i)));
  oListAdapter.addSection(cartLists.get(i).get(0).getAisle(),
  adapterList.get(i));
}
listView.setAdapter(oListAdapter);

2 个答案:

答案 0 :(得分:1)

将父AdapterView作为参数传递给onItemClick(),它有getAdapter()

答案 1 :(得分:1)

我最后通过写一个丑陋的黑客来解决这个问题。 因为每个部分标题也被计算,我有另一个项目位置关闭。 同样对于适配器,每个适配器上的第一项是位置0,所以我也在计算它。 虽然这是一个丑陋的黑客,但至少它完全适合我正在做的事情。我是我要找的号码。

int i = 0;
int sizes = 0;
while (true)
{
  sizes += cartLists.get(i).size();
  position -= 1;
  if (position < sizes)
  {
    position -= sizes;
    position += cartLists.get(i).size();
    break;
  }
  else
  {
    i++;
  }
}