Java Android Gridview在滚动后未保留所选内容

Java Android Gridview在滚动后未保留所选内容,java,android,android-gridview,Java,Android,Android Gridview,嗨,我需要帮助找到为什么我的android gridview中的选择不起作用。我正在尝试在我的应用程序中添加允许用户突出显示选定项目的功能。它正在工作(即所选项目高亮显示),但只要我滚动,所选内容就会消失。另外,如果我选择6个单元格,它会高亮显示第8个单元格 代码如下: XML 下面是GridView绑定和选择: private void BindData(String filter) { GridView gridView = findViewById(R.id.grid_view

嗨,我需要帮助找到为什么我的android gridview中的选择不起作用。我正在尝试在我的应用程序中添加允许用户突出显示选定项目的功能。它正在工作(即所选项目高亮显示),但只要我滚动,所选内容就会消失。另外,如果我选择6个单元格,它会高亮显示第8个单元格

代码如下: XML


下面是GridView绑定和选择:

private void BindData(String filter) {
    GridView gridView = findViewById(R.id.grid_view);
    CommonUtils utils = new CommonUtils();
    String dropdate = utils.getTodaysDate();

    final Booking h = new Booking();

    bookingsList = new ArrayList<Booking>();

    bookingsList = h.getAllBookingsForClassroom(ASCActivity.this, room_id, dropdate,filter);
    adapter = new BookingGridViewAdapter(ASCActivity.this, bookingsList,true);
    gridView.setAdapter(adapter);
    final SharedPreferences pref =  this.getSharedPreferences(SETTINGS_PREFS_NAME, Context.MODE_PRIVATE);




    // OnClick
    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v,

                                int position, long id) {

            GridView gridView = ASCActivity.this.findViewById(R.id.grid_view);

            final int size = gridView.getChildCount();
            CommonUtils utils = new CommonUtils();

            for(int i = 0; i < size; i++) {
                ViewGroup gridChild = (ViewGroup) gridView.getChildAt(position);

                if (gridChild != null) {
                    LinearLayout tv = (LinearLayout) gridChild.findViewById(R.id.parentPanel);
                    int color = ((ColorDrawable)tv.getBackground()).getColor();
                    if(color == -4591){
                        tv.setBackgroundColor(Color.parseColor("#ffee12"));
                    }else{
                        tv.setBackgroundColor(Color.parseColor("#ffee11"));
                    }
                    break;
                }
            }

    }

}
private void BindData(字符串过滤器){
GridView GridView=findviewbyd(R.id.grid\u视图);
CommonUtils utils=新的CommonUtils();
字符串dropdate=utils.getTodaysDate();
最终预订h=新预订();
bookingsList=newarraylist();
bookingsList=h.GetAllBookingsFor教室(ASCActivity.this、room\u id、dropdate、筛选器);
adapter=new BookingGridViewAdapter(ASCActivity.this,bookingsList,true);
setAdapter(适配器);
final SharedReferences pref=this.getSharedReferences(设置\首选项\名称、上下文.模式\私有);
//OnClick
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、,
内部位置,长id){
GridView GridView=ASCActivity.this.findViewById(R.id.grid\u视图);
final int size=gridView.getChildCount();
CommonUtils utils=新的CommonUtils();
对于(int i=0;i
BindData()
在您滚动顶部或底部时将被调用,视图将重置为初始视图,因此在预订模型中维护状态数组或状态布尔值,并比较布尔值以检查是否选中

private void BindData(String filter) {
    GridView gridView = findViewById(R.id.grid_view);
    CommonUtils utils = new CommonUtils();
    String dropdate = utils.getTodaysDate();

    final Booking h = new Booking();

    bookingsList = new ArrayList<Booking>();

    bookingsList = h.getAllBookingsForClassroom(ASCActivity.this, room_id, dropdate,filter);
    adapter = new BookingGridViewAdapter(ASCActivity.this, bookingsList,true);
    gridView.setAdapter(adapter);
    final SharedPreferences pref =  this.getSharedPreferences(SETTINGS_PREFS_NAME, Context.MODE_PRIVATE);




    // OnClick
    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v,

                                int position, long id) {

            GridView gridView = ASCActivity.this.findViewById(R.id.grid_view);

            final int size = gridView.getChildCount();
            CommonUtils utils = new CommonUtils();

            for(int i = 0; i < size; i++) {
                ViewGroup gridChild = (ViewGroup) gridView.getChildAt(position);

                if (gridChild != null) {
                    LinearLayout tv = (LinearLayout) gridChild.findViewById(R.id.parentPanel);
                    int color = ((ColorDrawable)tv.getBackground()).getColor();
                    if(color == -4591){
                        tv.setBackgroundColor(Color.parseColor("#ffee12"));
                    }else{
                        tv.setBackgroundColor(Color.parseColor("#ffee11"));
                    }
                    break;
                }
            }

    }

}