Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 选择和取消选择重新查看项目未正确更改图像_Java_Android_Arrays_Android Recyclerview - Fatal编程技术网

Java 选择和取消选择重新查看项目未正确更改图像

Java 选择和取消选择重新查看项目未正确更改图像,java,android,arrays,android-recyclerview,Java,Android,Arrays,Android Recyclerview,我正在开发一个公交车预订应用程序。我想当我选择座位时,它会改变座位图像。取消选择它将更改为最后一张图像。我的其他功能可以很好地选择座位,在文本视图中显示座位号,取消选择也可以很好地工作。但问题在于不改变座椅图像。如果我点击18号座位,即实际上是20号座位,它会改变第一个座位的图像,即A号座位,如果是19号座位,则是B号座位,如果是20号座位,则是1号座位,依此类推 公共类SeatSelection扩展AppCompative实现AdapterView.OnItemClickListener{

我正在开发一个公交车预订应用程序。我想当我选择座位时,它会改变座位图像。取消选择它将更改为最后一张图像。我的其他功能可以很好地选择座位,在文本视图中显示座位号,取消选择也可以很好地工作。但问题在于不改变座椅图像。如果我点击18号座位,即实际上是20号座位,它会改变第一个座位的图像,即A号座位,如果是19号座位,则是B号座位,如果是20号座位,则是1号座位,依此类推

公共类SeatSelection扩展AppCompative实现AdapterView.OnItemClickListener{
回收视图回收视图;
SeatAdapter SeatAdapter;
列出座位明细表;
列席会议;
TextView txtSeatNo;
TextView票价;
公共位图seatIcon;
公共位图座椅选择;
串成本;
国际金额;
整数电荷;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局、活动、座位、选择);
seatIcon=BitmapFactory.decodeResource(this.getResources(),R.drawable.seat\u布局\u屏幕\u nor\u avl);
seatSelect=BitmapFactory.decodeResource(this.getResources(),R.drawable.seat\u布局\u屏幕\u nor\u标准);
recyclerView=(recyclerView)findViewById(R.id.recycler);
RecyclerView.LayoutManager LayoutManager=新的GridLayoutManager(这个,5);
recyclerView.setLayoutManager(layoutManager);
seatAdapter=新的seatAdapter(此为loadBustListSeats());
recyclerView.setAdapter(座椅适配器);
}
公共舱位详情{
字符串名;
布尔值为空;
他当选了;
公用座位详细信息(字符串名称,布尔值为空,布尔值为选定){
this.name=名称;
this.isBlank=isBlank;
this.isSelected=isSelected;
}
公共字符串getName(){
返回名称;
}
已选择公共无效设置(已选择布尔值){
isSelected=已选择;
}
}
公共列表loadBustListSeats(){
seatDetailsList=新的ArrayList();
int seatSerialNumber=1;
对于(int i=0;i<60;i++){
如果(i){
添加(新的SeatDetails(“,true,false));
}否则{
如果(i==0){
添加(新的SeatDetails(“A”,真,假));
}else如果(i==1){
添加(新的SeatDetails(“B”,真,假));
}否则{
添加(新的SeatDetails(String.valueOf(seatSerialNumber),true,false));
seatSerialNumber=seatSerialNumber+1;
}
}
}
返回座位明细表;
}
公共座椅(int i){
如果((60-(i-1))<5)
返回false;
其他的
返回i%5==2;
}
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
}
已选择公共空座位(内部位置)
{
费用=费用+金额;
seatNo.add(seatDetailList.get(pos.getName());
setText(seatNo.toString());
fare.setText(String.valueOf(charge));
seatDetailsList.get(位置).setSelected(真);
seatAdapter.notifyDataSetChanged();
}
已重新选择公共空座位(内部位置)
{
费用=费用-金额;
fare.setText(String.valueOf(charge));
seatNo.remove(seatDetailList.get(pos.getName());
setText(seatNo.toString());
seatDetailsList.get(位置)setSelected(错误);
seatAdapter.notifyDataSetChanged();
}
公共类SeatAdapter扩展了RecyclerView.Adapter{
类ViewHolder原始扩展RecyclerView.ViewHolder{
图像视图图像视图;
文本视图文本视图;
ViewHolderOriginal(视图项视图){
超级(项目视图);
imageView=(imageView)itemView.findViewById(R.id.item\u image);
textView=(textView)itemView.findViewById(R.id.item\u text);
}
}
类ViewHolderBlank扩展了RecyclerView.ViewHolder{
ViewHolderBlank(视图项视图){
超级(项目视图);
}
}
公共环境cntx;
公共座椅适配器(上下文、列表){
cntx=上下文;
seatDetailsList=列表;
}
//0=原始视图1=空白视图
@凌驾
public int getItemViewType(int位置){

如果((getItemCount()-(position-1))用户选择/取消选择座位时需要刷新列表。因此,您可以使用notifydatasetchanged()在事件后刷新列表。

用户选择/取消选择座位时需要刷新列表。因此,您可以使用notifydatasetchanged()在事件后刷新列表。

尝试以下操作:

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
    if (holder instanceof ViewHolderBlank) {

    } else if (holder instanceof ViewHolderOriginal) {
        SeatDetails seatDetails = seatDetailsList.get(position);
        if (seatDetails.isSelected){
            ((ViewHolderOriginal) holder).imageView.setImageBitmap(seatSelect);
        }else{
            ((ViewHolderOriginal) holder).imageView.setImageBitmap(seatIcon);
        }

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SeatDetails seatDetails = seatDetailsList.get(position);

                if (seatDetails.isSelected){
                    seatDeselected(position);
                }else{
                    seatSelected(position);
                }
            }
        });
    }
}
您忘记了根据数据设置视图。由于您的函数中有NOTIFYDATASETCHANGE(),因此无需在onClcik()中更改图像。希望这有帮助!

尝试以下操作:

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
    if (holder instanceof ViewHolderBlank) {

    } else if (holder instanceof ViewHolderOriginal) {
        SeatDetails seatDetails = seatDetailsList.get(position);
        if (seatDetails.isSelected){
            ((ViewHolderOriginal) holder).imageView.setImageBitmap(seatSelect);
        }else{
            ((ViewHolderOriginal) holder).imageView.setImageBitmap(seatIcon);
        }

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SeatDetails seatDetails = seatDetailsList.get(position);

                if (seatDetails.isSelected){
                    seatDeselected(position);
                }else{
                    seatSelected(position);
                }
            }
        });
    }
}

您忘记了根据数据设置视图。由于您的函数中有NOTIFYDATASETCHANGE(),因此无需在onClcik()中更改图像。希望这能有所帮助!

我已经在seatSelected和seatDeselected函数中执行了seatSelected和seatDeselected函数