我有两个列表,一个长和一个短列表。 只显示较长的一个,并且长列表中也在短列表中的列表项应获得蓝色backgroundColor。你可以猜到,这是行不通的。ListView项目不会在onCreate中更改它的backgroundColor,但它确实onItemClick
除此之外,我可以更改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,并展示了其在举杯文本。
虽然可能有完全的其他选项来做到这一点,但我想知道为什么backgroundColor的“A”项不会改变onCreate而它应该(它也不会崩溃),尽管它工作在onItemClickListener。
编辑: 我皆已setAdapter部分的位置和if语句(如我在原来的代码有它在逻辑上),并且由于Android工作室建议使用setBackgroundResource,但这并没有解决问题。
我认为这是因为它使用了simple_list_item_1的背景颜色。在您运行适配器之前不会设置它。尝试让它在适配器中处理时更改它。或者您可以在适配器显示项目后找出想要更改的项目。 –