gpt4 book ai didi

android - 关于设置ListView项目背景颜色的问题

转载 作者:行者123 更新时间:2023-11-29 00:40:25 26 4
gpt4 key购买 nike

我有一个 ListView,当用户点击其中一项时,我希望该项目变为蓝色。为此,在 ListView Activity 的 onCreate() 方法中,我为用户点击设置了一个监听器。

m_listFile=(ListView)findViewById(R.id.ListView01);  
m_listFile.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView<?> arg0, View arg1,int arg2, long arg3) {
arg0.getChildAt(arg2).setBackgroundColor(Color.BLUE);
}
});

对于第一个可见项目,一切正常,但是当我滚动列表时,我有一个NullPointerExceptionarg0.getChildAt(arg2).setBackgroundColor(...),即使 arg2 值具有正确的项目索引位置。

我的 ListView 有两行项目结构,当我加载 ListView 时,我使用这个适配器:

 SimpleAdapter sa = new SimpleAdapter(
getApplicationContext(),
expsList,
R.layout.listelement,
new String[] { "screen_name","text" },
new int[] { R.id.Name, R.id.Value}) {

};

m_listFile.setAdapter(sa);

我不知道如何解决这个问题。我能得到一些帮助吗?

最佳答案

您可以像这样扩展 SimpleAdapter:

private class MyAdapter extends SimpleAdapter {

public MyAdapter(Context context, List<? extends Map<String, ?>> data,
int resource, String[] from, int[] to) {
super(context, data, resource, from, to);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
v.setBackgroundColor(Color.BLACK); //or whatever is your default color
//if the position exists in that list the you must set the background to BLUE
if(pos!=null){
if (pos.contains(position)) {
v.setBackgroundColor(Color.BLUE);
}
}
return v;
}

}

然后在您的 Activity 中添加这样的字段:

//this will hold the cliked position of the ListView
ArrayList<Integer> pos = new ArrayList<Integer>();

并设置适配器:

sa = new MyAdapter(
getApplicationContext(),
expsList,
R.layout.listelement,
new String[] { "screen_name","text" },
new int[] { R.id.Name, R.id.Value}) {

};
m_listFile.setAdapter(sa);

当您点击该行时:

    public void onItemClick(AdapterView<?> arg0, View arg1,int arg2, long arg3) {  
// check before we add the position to the list of clicked positions if it isn't already set
if (!pos.contains(position)) {
pos.add(position); //add the position of the clicked row
}
sa.notifyDataSetChanged(); //notify the adapter of the change
}

关于android - 关于设置ListView项目背景颜色的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9757756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com