2011-03-25 206 views
8

我有两个相同类型的ListView(A和B)(我创建的类)如何获取ListView项目的视图?

当我点击A中的某个项目时,它将此对象添加到B上,如果再次单击它,则将其删除。 只有当选择一个项目时,我使用view.setBackgroundColor(myColor)更改其背景。

我希望能够删除列表B(它的工作)的项目,但我想还重置背景色。我无法弄清楚如何得到我要删除的这个项目的视图。

任何想法?

+0

如果你告诉我们,你的一些代码(相关部分)的,它会更容易帮助你。 – Phonon 2011-03-25 13:58:41

+0

我忘了提及我使用制表符在列表之间切换。关于代码,没有什么太多的复杂,我伸出ArrayAdapters,和我的onClick使用view.setBackgroundColor(myColor) – Lucas 2011-03-28 15:25:44

回答

10

有没有保证任何特定的ListView项甚至会在任何给定时间的视图。如果该项目目前不在屏幕上,则可能无法查看。由于特定项目可能没有视图,因此尝试获取项目视图可能没有任何意义。

除此之外,因为ListView控件的方式创建和重用的意见,你会看到一些奇怪的,不期望的效果,如果你只是直接修改意见。当用户滚动浏览列表时,变得可见的项目将不正确地以与已经落在可见部分之外的其他项目相同的背景结束。

我不知道接下来是否实现你的功能,因为我不知道发生变化后重建的费用清单的最好办法。这里是我可能会这样做(可能是天真的):

  1. 将另一个布尔成员添加到您的数据对象,如isInSecondList
  2. 覆盖getView()在适配器。在getView(),将背景设置为正常或取决于该项目的isInSecondList的价值凸显。
  3. 当一个项目被添加或从所述第二列表中删除,更新数据对象,以反映改变,则调用适配器的notifyDataSetChanged()
+0

嗨,我不喜欢的解决方案。只有我不够清楚,如果我告诉你我使用了一个包含两个列表的TabActivity,那么你可能会添加一些东西。 – Lucas 2011-03-29 10:10:50

+0

我没有添加布尔值,而是检查列表是否包含对象。至于步骤2和步骤3,我做了你的建议,并且完美地工作。谢谢! – Lucas 2011-04-20 12:43:52

+0

我想回答数字3是让视图列表视图 – Milaaaad 2016-01-29 08:10:01

5
int position = 0; 
listview.setItemChecked(position, true); 
View wantedView = adapter.getView(position, null, listview); 
+0

YES,它的好方法android的列表视图中的位置基本视图谢谢你,我考10个或更多的方式最好的方式,但它的最好 – Milaaaad 2016-01-29 08:08:33

0

这里是我做了什么

private View oldSelection; 

@Override 
public void onItemClick(AdapterView<?> arg0, View view, int position, 
     long arg3) { 
     highlightSelectdListItem(position); 
} 

    public void highlightSelectdListItem(int position) { 
    clearPreviousSelection(); 
    View newsItemView = mGridVIew.getChildAt(position); 
    oldSelection = newsItemView; 
    newsItemView.setBackgroundColor(Color.GRAY); 
    } 


public void clearPreviousSelection() { 
    if (oldSelection != null) { 
     oldSelection.setBackgroundColor(Color.TRANSPARENT); 
    } 

} 
+0

它不是因为关闭工作-screen列表视图,例如,当i。由触摸第50项上项点击位置的代码返回** **空---> '查看newsItemView = mGridVIew.getChildAt(位置);' 其因为该列表查看从列表中查看的项目顶部计算位置不在列表中 – Milaaaad 2016-01-29 08:00:19