0

我有含有检查应该接受的RecyclerAdaptergetAdapterPosition()CheckBox一个RecyclerView和检查的状态(布尔) CheckBox作为键和值在hashmap'.getAdapterPosition() is converted to Integer object.When the CheckBox`被检查它会给出以下错误。

错误:不包括

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.util.Map$Entry 
                        at com.example.jobinsabu.destination.TourPlacesRecyclerAdapter$RecyclerHolder$1.onChange(TourPlacesRecyclerAdapter.java:89) 
                        at com.github.lguipeng.library.animcheckbox.AnimCheckBox.setChecked(AnimCheckBox.java:291) 
                        at com.github.lguipeng.library.animcheckbox.AnimCheckBox.setChecked(AnimCheckBox.java:264) 
                        at com.github.lguipeng.library.animcheckbox.AnimCheckBox$1.onClick(AnimCheckBox.java:74) 
                        at android.view.View.performClick(View.java:5198) 
                        at android.view.View$PerformClick.run(View.java:21147) 
                        at android.os.Handler.handleCallback(Handler.java:739) 
                        at android.os.Handler.dispatchMessage(Handler.java:95) 
                        at android.os.Looper.loop(Looper.java:148) 
                        at android.app.ActivityThread.main(ActivityThread.java:5417) 
                        at java.lang.reflect.Method.invoke(Native Method) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

TourPlacesRecyclerAdapter.java:(Full Java类)

public class RecyclerHolder extends RecyclerView.ViewHolder{ 
     HashMap<Integer,Boolean> hashMap; 
        AnimCheckBox checkBox; 
        public RecyclerHolder(final View itemView) { 
         super(itemView); 

         checkBox=(AnimCheckBox) itemView.findViewById(R.id.checkBox); 
         checkBox.setChecked(false); 

         checkBox.setOnCheckedChangeListener(new AnimCheckBox.OnCheckedChangeListener() { 
          @Override 
          public void onChange(boolean checked) { 
           if(checkBox.isChecked()){ 
            boolean check=true; 
            clicked_position=getAdapterPosition(); 
            i=new Integer(clicked_position); 
            hashMap.put(i, check); 
            Toast.makeText(context,"You checked item:"+getAdapterPosition(),Toast.LENGTH_SHORT).show(); 
      Set s=hashMap.keySet(); 
        Iterator i=s.iterator(); 
        while (i.hasNext()){ 
         Map.Entry entry=(Map.Entry)i.next(); 
         Log.e("Position"+entry.getKey().toString(),"Status"+entry.getValue().toString()); 
        } 
        SharedPreferences sharedPreferences=context.getSharedPreferences("Main",Context.MODE_PRIVATE); 
        bt_click_status=sharedPreferences.getBoolean("Btnheck",false); 
        Log.e("Entered",Boolean.toString(bt_click_status)); 
           } 
           } 
         }); 
        }} 
+1

尝试更换hashmap.keySet()与hashMap.entrySet()。它应该解决我想的问题。 – Bhargav

回答

1

您遍历HashMap中的键集在这里:

Set s=hashMap.keySet(); 
Iterator i=s.iterator(); 
while (i.hasNext()){ 
    Map.Entry entry=(Map.Entry)i.next(); 
    Log.e("Position"+entry.getKey().toString(),"Status"+entry.getValue().toString()); 
} 

的键集只包含Integer s(因为你的hashmap的关键是)。当然,Integer s不是来自Map.Entry,因此您的ClassCastException

你应该把你的HashMap的的entrySet和循环,像这样

Set<Map.Entry<Integer, Boolean>> s = map.entrySet(); 
Iterator<Map.Entry<Integer, Boolean>> i = s.iterator(); 
while (i.hasNext()) { 
    Map.Entry<Integer, Boolean> entry = (Map.Entry<Integer, Boolean>) i.next(); 
} 
1

您有:

Set s=hashMap.keySet(); 

你大概意思即可进入设置改为:

Set s=hashMap.entrySet(); 

如果你使用泛型,编译器会为你检测到这个问题。

1

你应该使用的hashMap.entrySet()代替hashMap.keySet()

相关问题