我有两个列表,一个长的和一个短的。只显示长列表,长列表中的列表项也位于短列表中,背景颜色为蓝色。你可以猜到,这行不通。
除此之外,我可以更改 onItemClick 项目的 backgroundColor。(这有效)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_couple_file);
List<String> longList = new ArrayList<String>();
longList.add("A");
longList.add("B");
List<String> shortList = new ArrayList<String>();
longList.add("A");
// display longList
ListView list = (ListView) findViewById(R.id.list);
ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, longList);
list.setAdapter(listAdapter);
// look for common elements
for (int i = 0; i < longList.size(); i++) {
if (shortList.contains(longList.get(i))) {
View view = listAdapter.getView(i, null, list);
// should change the item view's color, but it doesn't
view.setBackgroundResource(R.color.blue);
}
}
registerClick();
}
private void registerClick() {
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View viewClicked, int position, long id) {
// however, this does change the item view's color
viewClicked.setBackgroundResource(R.color.red);
}
}
我知道 if 语句有效,我已将视图转换为 TextView 并在吐司中显示其文本。
虽然可能有完全其他的选项可以做到这一点,但我想知道为什么“A”项目的背景颜色在它应该改变的时候没有改变(它也不会崩溃),尽管它在 onItemClickListener 中工作。
编辑:我已经切换了 setAdapter 部分和 if 语句的位置(因为我在我的原始代码中逻辑上有它),并按照 android studio 的建议使用了 setBackgroundResource ,但这并没有解决问题。
请移动您的此代码::
for (int i = 0; i < longList.size(); i++)
{
if (shortList.contains(longList.get(i)))
{
View view = listAdapter.getView(i, null, list);
// should change the item view's color, but it doesn't
view.setBackgroundColor(getResources().getColor(R.color.blue));
}
}
在“registerClicks()”之后:
registerClick();
for (int i = 0; i < longList.size(); i++)
{
if (shortList.contains(longList.get(i)))
{
View view = listAdapter.getView(i, null, list);
// should change the item view's color, but it doesn't
view.setBackgroundColor(getResources().getColor(R.color.blue));
}
}
实际上问题在于,您在实际列出列表视图之前调用了背景更改。所以它没有得到你想要改变背景颜色的孩子的意见。
编辑:
使用此代码:
list.post(new Runnable() {
@Override
public void run() {
for (int i = 0; i < longList.size(); i++) {
if (shortList.contains(longList.get(i))) {
list.getChildAt(i).setBackgroundColor(
getResources().getColor(R.color.blue));
}
}
}
});
为什么我使用“.post()”,因为没有这个我们正在获取它的视图,但你的列表还没有创建。
谢谢和快乐编码!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句