Java 列表视图项单击时更改颜色

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中有24个文本视图,其中每一个视图每天显示一个小时。 我试图做的是更改我单击的项目的背景色

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;
    }


}