Java 列表视图项单击时更改颜色
我的listview中有24个文本视图,其中每一个视图每天显示一个小时。 我试图做的是更改我单击的项目的背景色Java 列表视图项单击时更改颜色,java,android,android-listview,Java,Android,Android Listview,我的listview中有24个文本视图,其中每一个视图每天显示一个小时。 我试图做的是更改我单击的项目的背景色 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int i, long l) { View v;
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int i, long l) {
View v;
v = parent.getChildAt(i);
v.setBackgroundColor(Color.GREEN);
}
});
不总是获得相同的固定项目。
我想知道应该如何做到这一点,以便只有被点击的项目改变背景颜色
编辑:
这就是整个片段类
public class GamesFragment extends Fragment {
//TopRatedFragment tf = new TopRatedFragment();
List list = new ArrayList<Date>();
public ArrayAdapter<String> adapter;
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
View v;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_games, container, false);
final ListView listView = (ListView) rootView.findViewById(R.id.listView);
for(int i = 0;i<24;i++){
String date = Integer.toString(i) +":00";
try{
Date num = sdf.parse(date);
SimpleDateFormat time = new SimpleDateFormat("HH:mm");
list.add(time.format(num));
}catch(ParseException e){
e.printStackTrace();
}
}
adapter = new ArrayAdapter<String>(this.getActivity(), R.layout.layout1,R.id.textView,list);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int i, long l) {
View v;
v = parent.getChildAt(i);
v.setBackgroundColor(Color.GREEN);
}
});
listView.setAdapter(adapter);
return rootView;
}
}
这是由于getView,它可以多次调用其他项目背景更改。您需要定制适配器,并且可以从getView更改背景颜色。即使您必须存储背景颜色并在列表中根据位置进行相应设置。正如Chitrang所说,您需要创建自定义阵列适配器。如果您不想创建自定义适配器,请使用此解决方案
public class GamesFragment extends Fragment {
//TopRatedFragment tf = new TopRatedFragment();
List list = new ArrayList<Date>();
public ArrayAdapter<String> adapter;
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
View v;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_games, container, false);
final ListView listView = (ListView) rootView.findViewById(R.id.listView);
for(int i = 0;i<24;i++){
String date = Integer.toString(i) +":00";
try{
Date num = sdf.parse(date);
SimpleDateFormat time = new SimpleDateFormat("HH:mm");
list.add(time.format(num));
}catch(ParseException e){
e.printStackTrace();
}
}
adapter = new ArrayAdapter<String>(this.getActivity(), R.layout.layout1,R.id.textView,list);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int i, long l) {
View v;
v = parent.getChildAt(i);
v.setBackgroundColor(Color.GREEN);
}
});
listView.setAdapter(adapter);
return rootView;
}
}