我有两个列表,一个很长,一个很短。 将仅显示长的列表,并且长列表中也位于短列表中的列表项应该为蓝色backgroundColor。 你可以猜到,这不起作用。
除此之外,我可以更改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并以吐司方式显示其文本。
虽然可能还有其他选择可以做到这一点,但我想知道为什么背景颜色为&#34; A&#34;虽然项目在onItemClickListener中有效,但项目不会在创建时更改(它也不会崩溃)。
修改 我已经切换了setAdapter部分和if语句的位置(正如我在逻辑上的原始代码中所使用的那样),并使用setBackgroundResource作为android studio建议,但这并没有解决问题。
答案 0 :(得分:1)
使用list.getchildat(),在括号内指定索引,应该可以工作。
答案 1 :(得分:0)
请移动您的代码::
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));
}
}
以后注册点击()&#39;
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));
}
}
}
});
为什么我使用&#34; .post()&#34;,因为没有它我们正在获取它的视图,但你的列表还没有被创建。
谢谢,快乐编码!!