2017-06-30 39 views
0

嗨朋友我从这个问题2天来了我不知道这里的问题最近我用快速Adapter mikepenz在这里我有两个回收站视图。在这里正在此错误ViewHolder与一个构造函数,它需要一个视图回收视图

java.lang.RuntimeException: You have to provide a ViewHolder with a constructor which takes a view! 
at com.mikepenz.fastadapter.items.AbstractItem$ReflectionBasedViewHolderFactory.create(AbstractItem.java:349) 

我想我已成立了一切正确的,因为我正在使用其他类相同的格式,以及,但我也只是面对这个问题类,我不激活了progurard请找以下代码

主类:

public class Incoming_request extends Fragment { 
@BindView(R.id.incoming_req_recycler_view) 
RecyclerView incoming_req_recycler_view; 
@BindView(R.id.people_recycler_view) 
RecyclerView people_recycler_view; 
FastItemAdapter<Incoming_Request_adapter> incoming_req_adapter = new FastItemAdapter<>(); 
FastItemAdapter<People_Request_adapter> people_req_adapter = new FastItemAdapter<>(); 
@BindView(R.id.frd_req_no) 
AppCompatTextView frd_req_no; 
    @BindView(R.id.namesearch) 
AutoCompleteTextView namesearch; 
ArrayList<Search_Pojo> searchlist = new ArrayList<>(); 
Search_Adapter search_adapter; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.incoming_req, container, false); 
} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    ButterKnife.bind(this, view); 
    incoming_req_recycler_view.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false)); 
    people_recycler_view.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false)); 
    incoming_requests(""); 
    incoming_req_recycler_view.setAdapter(incoming_req_adapter); 
    people_recycler_view.setAdapter(people_req_adapter); 
    search_adapter=new Search_Adapter(getActivity(),R.layout.search_adapter_item,searchlist); 
    namesearch.setThreshold(1); 
    namesearch.setAdapter(search_adapter); 
    search_adapter.notifyDataSetChanged(); 
    namesearch.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Search_Pojo search = (Search_Pojo) parent.getItemAtPosition(position); 
      namesearch.setText(search.getUsername()); 
      Intent otherprofileintent = new Intent(getActivity(), Other_Profile.class); 
      otherprofileintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      otherprofileintent.putExtra("frd_status", search.getFriend_status()); 
      otherprofileintent.putExtra("frd_id", search.getUserid()); 
      startActivity(otherprofileintent); 
     } 
    }); 
    people_req_adapter.withOnClickListener(new FastAdapter.OnClickListener<People_Request_adapter>() { 
     @Override 
     public boolean onClick(View v, IAdapter<People_Request_adapter> adapter, People_Request_adapter item, int position) { 
      Intent otherprofileintent = new Intent(getActivity(), Other_Profile.class); 
      otherprofileintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      otherprofileintent.putExtra("frd_status", item.getFriend_status()); 
      otherprofileintent.putExtra("frd_id", item.getTo_user_id()); 
      startActivity(otherprofileintent); 
      return true; 
     } 
    }); 
    people_req_adapter.withItemEvent(new ClickEventHook<People_Request_adapter>() { 
     @Override 
     public void onClick(View v, int position, FastAdapter<People_Request_adapter> fastAdapter, People_Request_adapter item) { 
      acceptrequest(item.getTo_user_id(), position); 
     } 

     @Nullable 
     @Override 
     public View onBind(@NonNull RecyclerView.ViewHolder viewHolder) { 
      if (viewHolder instanceof Incoming_Request_adapter.FriendRequest_ViewHolder) { 
       return viewHolder.itemView.findViewById(R.id.accept); 
      } 
      return null; 
     } 
    }); 
    people_req_adapter.withItemEvent(new ClickEventHook<People_Request_adapter>() { 
     @Override 
     public void onClick(View v, int position, FastAdapter<People_Request_adapter> fastAdapter, People_Request_adapter item) { 
      deleterequest(item.getTo_user_id(), position); 
     } 

     @Nullable 
     @Override 
     public View onBind(@NonNull RecyclerView.ViewHolder viewHolder) { 
      if (viewHolder instanceof Incoming_Request_adapter.FriendRequest_ViewHolder) { 
       return viewHolder.itemView.findViewById(R.id.cancel); 
      } 
      return null; 
     } 
    }); 
    people_req_adapter.withItemEvent(new ClickEventHook<People_Request_adapter>() { 
     @Override 
     public void onClick(View v, int position, FastAdapter<People_Request_adapter> fastAdapter, People_Request_adapter item) { 
      sendrequest(item.getTo_user_id(), position); 
     } 

     @Nullable 
     @Override 
     public View onBind(@NonNull RecyclerView.ViewHolder viewHolder) { 
      if (viewHolder instanceof Incoming_Request_adapter.FriendRequest_ViewHolder) { 
       return viewHolder.itemView.findViewById(R.id.sendrequest); 
      } 
      return null; 
     } 
    }); 

    incoming_req_adapter.withOnClickListener(new FastAdapter.OnClickListener<Incoming_Request_adapter>() { 
     @Override 
     public boolean onClick(View v, IAdapter<Incoming_Request_adapter> adapter, Incoming_Request_adapter item, int position) { 
      Intent otherprofileintent = new Intent(getActivity(), Other_Profile.class); 
      otherprofileintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      otherprofileintent.putExtra("frd_status", item.getFriend_status()); 
      otherprofileintent.putExtra("frd_id", item.getTo_user_id()); 
      startActivity(otherprofileintent); 
      return true; 
     } 
    }); 
    incoming_req_adapter.withItemEvent(new ClickEventHook<Incoming_Request_adapter>() { 
     @Override 
     public void onClick(View v, int position, FastAdapter<Incoming_Request_adapter> fastAdapter, Incoming_Request_adapter item) { 
      acceptrequest(item.getTo_user_id(), position); 
     } 

     @Nullable 
     @Override 
     public View onBind(@NonNull RecyclerView.ViewHolder viewHolder) { 
      if (viewHolder instanceof Incoming_Request_adapter.FriendRequest_ViewHolder) { 
       return viewHolder.itemView.findViewById(R.id.accept); 
      } 
      return null; 
     } 
    }); 
    incoming_req_adapter.withItemEvent(new ClickEventHook<Incoming_Request_adapter>() { 
     @Override 
     public void onClick(View v, int position, FastAdapter<Incoming_Request_adapter> fastAdapter, Incoming_Request_adapter item) { 
      deleterequest(item.getTo_user_id(), position); 
     } 

     @Nullable 
     @Override 
     public View onBind(@NonNull RecyclerView.ViewHolder viewHolder) { 
      if (viewHolder instanceof Incoming_Request_adapter.FriendRequest_ViewHolder) { 
       return viewHolder.itemView.findViewById(R.id.cancel); 
      } 
      return null; 
     } 
    }); 
    incoming_req_adapter.withItemEvent(new ClickEventHook<Incoming_Request_adapter>() { 
     @Override 
     public void onClick(View v, int position, FastAdapter<Incoming_Request_adapter> fastAdapter, Incoming_Request_adapter item) { 
      sendrequest(item.getTo_user_id(), position); 
     } 

     @Nullable 
     @Override 
     public View onBind(@NonNull RecyclerView.ViewHolder viewHolder) { 
      if (viewHolder instanceof Incoming_Request_adapter.FriendRequest_ViewHolder) { 
       return viewHolder.itemView.findViewById(R.id.sendrequest); 
      } 
      return null; 
     } 
    }); 
    /*incoming_refresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      loadrefreshcomplete = 1; 
      incoming_req_adapter.clear(); 
      incoming_requests(""); 
     } 
    });*/ 


} 

private void incoming_requests(String value) { 
    if (value.isEmpty()) { 
     Constant.showloader(getActivity()); 
    } 
    String outgoing_requesturl = Constant.psurl + "myrequests&userid=" + Session.getUserID(getActivity()); 
    Constant.l(outgoing_requesturl); 
    AndroidNetworking.get(outgoing_requesturl).setOkHttpClient(Constant.okClient()).build().getAsJSONObject(new JSONObjectRequestListener() { 
     @Override 
     public void onResponse(JSONObject response) { 
      try { 
       if (response.has("friendrequests")) { 
        JSONArray userlistarray = response.getJSONArray("friendrequests"); 
        for (int i = 0; i < userlistarray.length(); i++) { 
         JSONObject frdsarrayobj = userlistarray.getJSONObject(i); 
         Incoming_Request_adapter incomingadapter = new Incoming_Request_adapter(); 
         Search_Pojo search_pojo = new Search_Pojo(); 
         search_pojo.setUserid(frdsarrayobj.getString("userid")); 
         search_pojo.setUsername(frdsarrayobj.getString("username")); 
         search_pojo.setEmail(frdsarrayobj.getString("email")); 
         search_pojo.setPhone(frdsarrayobj.getString("phone")); 
         search_pojo.setCity(frdsarrayobj.getString("city")); 
         search_pojo.setUserstatus(frdsarrayobj.getString("user_status")); 
         search_pojo.setUser_profile_pic(frdsarrayobj.getString("userprofile")); 
         search_pojo.setFriend_status(frdsarrayobj.getString("friend_status")); 
         incomingadapter.setTo_user_id(frdsarrayobj.getString("userid")); 
         incomingadapter.setUsername(frdsarrayobj.getString("username")); 
         incomingadapter.setEmail(frdsarrayobj.getString("email")); 
         incomingadapter.setPhone(frdsarrayobj.getString("phone")); 
         incomingadapter.setCity(frdsarrayobj.getString("city")); 
         incomingadapter.setUserstatus(frdsarrayobj.getString("user_status")); 
         incomingadapter.setUser_profile_pic(frdsarrayobj.getString("userprofile")); 
         incomingadapter.setFriend_status(frdsarrayobj.getString("friend_status")); 
         incoming_req_adapter.add(incomingadapter); 
         searchlist.add(search_pojo); 
        } 
       } else { 
        frd_req_no.setVisibility(View.VISIBLE); 
        incoming_req_recycler_view.setVisibility(View.GONE); 
       } 
       if (response.has("userslist")) { 
        JSONArray frdlistarray = response.getJSONArray("userslist"); 
        for (int j = 0; j < frdlistarray.length(); j++) { 
         JSONObject userarrayobj = frdlistarray.getJSONObject(j); 
         Search_Pojo search_pojo = new Search_Pojo(); 
         search_pojo.setUserid(userarrayobj.getString("userid")); 
         search_pojo.setUsername(userarrayobj.getString("username")); 
         search_pojo.setEmail(userarrayobj.getString("email")); 
         search_pojo.setPhone(userarrayobj.getString("phone")); 
         search_pojo.setCity(userarrayobj.getString("city")); 
         search_pojo.setUserstatus(userarrayobj.getString("user_status")); 
         search_pojo.setUser_profile_pic(userarrayobj.getString("userprofile")); 
         search_pojo.setFriend_status(userarrayobj.getString("friend_status")); 
         People_Request_adapter peoplgreqadapter = new People_Request_adapter(); 
         peoplgreqadapter.setTo_user_id(userarrayobj.getString("userid")); 
         peoplgreqadapter.setUsername(userarrayobj.getString("username")); 
         peoplgreqadapter.setEmail(userarrayobj.getString("email")); 
         peoplgreqadapter.setPhone(userarrayobj.getString("phone")); 
         peoplgreqadapter.setCity(userarrayobj.getString("city")); 
         peoplgreqadapter.setUserstatus(userarrayobj.getString("user_status")); 
         peoplgreqadapter.setUser_profile_pic(userarrayobj.getString("userprofile")); 
         peoplgreqadapter.setFriend_status(userarrayobj.getString("friend_status")); 
         people_req_adapter.add(peoplgreqadapter); 
         searchlist.add(search_pojo); 
        } 
       } 

      } catch (JSONException e) { 
       Constant.l(e.toString()); 
       Constant.dismissloader(); 
      } 
      if (!value.isEmpty()) { 
       Constant.dismissloader(); 
      } 
      /*if (loadrefreshcomplete == 1) { 
       loadrefreshcomplete = 0; 
       incoming_refresh.setRefreshing(false); 
       Constant.dismissloader(); 
      }*/ 
     } 

     @Override 
     public void onError(ANError anError) { 
      Constant.l(anError.toString()); 
      Constant.dismissloader(); 
     } 
    }); 
} 


public void acceptrequest(String fid, final int position) { 
    Constant.showloader(getActivity()); 
    String sendurl = Constant.psurl + "sendrequest&from_id=" + fid + "&to_id=" + Session.getUserID(getActivity()); 
    Constant.l(sendurl); 
    AndroidNetworking.get(sendurl).build().getAsJSONObject(new JSONObjectRequestListener() { 
     @Override 
     public void onResponse(JSONObject response) { 
      try { 
       if (response.getString("status").equals("Success")) { 
        incoming_req_adapter.remove(position); 
       } 
      } catch (JSONException e) { 
       Constant.l(e.toString()); 
       Constant.dismissloader(); 
      } 
      Constant.dismissloader(); 
     } 

     @Override 
     public void onError(ANError anError) { 
      Constant.l(anError.toString()); 
      Constant.dismissloader(); 
     } 
    }); 
} 

public void deleterequest(String fid, final int position) { 
    Constant.showloader(getActivity()); 
    String sendurl = Constant.psurl + "deleterequest&from_id=" + Session.getUserID(getActivity()) + "&to_id=" + fid; 
    Constant.l(sendurl); 
    AndroidNetworking.get(sendurl).build().getAsJSONObject(new JSONObjectRequestListener() { 
     @Override 
     public void onResponse(JSONObject response) { 
      try { 
       if (response.getString("status").equals("Success")) { 
        incoming_req_adapter.remove(position); 
       } 
      } catch (JSONException e) { 
       Constant.l(e.toString()); 
       Constant.dismissloader(); 
      } 
      Constant.dismissloader(); 
     } 

     @Override 
     public void onError(ANError anError) { 
      Constant.l(anError.toString()); 
      Constant.dismissloader(); 
     } 
    }); 
} 

public void sendrequest(String fid, final int position) { 
    Constant.showloader(getActivity()); 
    String sendurl = Constant.psurl + "sendrequest&from_id=" + Session.getUserID(getActivity()) + "&to_id=" + fid; 
    Constant.l(sendurl); 
    AndroidNetworking.get(sendurl).build().getAsJSONObject(new JSONObjectRequestListener() { 
     @Override 
     public void onResponse(JSONObject response) { 
      try { 
       if (response.getString("status").equals("Success")) { 
        incoming_req_adapter.remove(position); 
        EventBus.getDefault().post(new Event_Bus("outgoing")); 
       } 
      } catch (JSONException e) { 
       Constant.l(e.toString()); 
       Constant.dismissloader(); 
      } 
      Constant.dismissloader(); 
     } 

     @Override 
     public void onError(ANError anError) { 
      Constant.l(anError.toString()); 
      Constant.dismissloader(); 
     } 
    }); 
} 

@Subscribe(threadMode = ThreadMode.MAIN) 
public void groupcreated(Event_Bus eventBus) { 
    if (eventBus.getEventname().equals("incoming")) { 
     incoming_req_adapter.clear(); 
     incoming_requests("incoming"); 
     Constant.dismissloader(); 
    } 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    EventBus.getDefault().register(this); 
} 

@Override 
public void onStop() { 
    EventBus.getDefault().unregister(this); 
    super.onStop(); 
} 

}

Adapter.class

public class Incoming_Request_adapter extends AbstractItem<Incoming_Request_adapter, Incoming_Request_adapter.FriendRequest_ViewHolder> { 
    @SerializedName("userid") 
    private String to_user_id; 
    @SerializedName("userprofile") 
    private String user_profile_pic; 
    @SerializedName("username") 
    private String username; 
    @SerializedName("email") 
    private String email; 
    @SerializedName("phone") 
    private String phone; 
    @SerializedName("city") 
    private String city; 
    @SerializedName("user_status") 
    private String userstatus; 
    @SerializedName("friend_status") 
    private String friend_status; 


    public String getFriend_status() { 
     return friend_status; 
    } 

    public void setFriend_status(String friend_status) { 
     this.friend_status = friend_status; 
    } 

    public String getTo_user_id() { 
     return to_user_id; 
    } 

    public void setTo_user_id(String to_user_id) { 
     this.to_user_id = to_user_id; 
    } 

    public String getUser_profile_pic() { 
     return user_profile_pic; 
    } 

    public void setUser_profile_pic(String user_profile_pic) { 
     this.user_profile_pic = user_profile_pic; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public String getPhone() { 
     return phone; 
    } 

    public void setPhone(String phone) { 
     this.phone = phone; 
    } 

    public String getCity() { 
     return city; 
    } 

    public void setCity(String city) { 
     this.city = city; 
    } 

    public String getUserstatus() { 
     return userstatus; 
    } 

    public void setUserstatus(String userstatus) { 
     this.userstatus = userstatus; 
    } 

    @Override 
    public int getType() { 
     return R.id.incoming_req_recycler_view; 
    } 


    @Override 
    public int getLayoutRes() { 
     return R.layout.incoming_request_item; 
    } 

    @Override 
    public void bindView(FriendRequest_ViewHolder holder, List<Object> payloads) { 
     super.bindView(holder, payloads); 
     holder.frd_req_item_name.setText(username.replace("$", " ")); 
     holder.frd_req_msg.setText(userstatus.replace("$", " ")); 
     Picasso.with(holder.itemView.getContext()).load(user_profile_pic).into(holder.frd_req_img); 
     if (friend_status.equals("1")) { 
      holder.linearLayout.setVisibility(View.VISIBLE); 
      holder.sendrequest.setVisibility(View.GONE); 
     } else if (friend_status.equals("0")) { 
      holder.linearLayout.setVisibility(View.GONE); 
      holder.sendrequest.setVisibility(View.VISIBLE); 
     } 


    } 


    public static class FriendRequest_ViewHolder extends RecyclerView.ViewHolder { 
     @BindView(R.id.frd_req_img) 
     CircleImageView frd_req_img; 
     @BindView(R.id.frd_req_item_name) 
     TextView frd_req_item_name; 
     @BindView(R.id.frd_req_msg) 
     TextView frd_req_msg; 
     @BindView(R.id.accept) 
     FancyButton accept; 
     @BindView(R.id.cancel) 
     FancyButton cancel; 
     @BindView(R.id.linearLayout) 
     LinearLayout linearLayout; 
     @BindView(R.id.sendrequest) 
     FancyButton sendrequest; 
     @BindView(R.id.incoming_text) 
     AppCompatTextView incoming_text; 


     public FriendRequest_ViewHolder(View itemView) { 
      super(itemView); 
      ButterKnife.bind(this, itemView); 
     } 
    } 
} 
+0

适配器类中的onCreateViewHolder方法在哪里? –

+0

我正在使用mikepenz的快速适配器,我们不需要这个库中的方法 –

回答

0

至于我可以告诉你正在使用的FastAdapter仍然启用了一个功能过时的版本,自动检测提供ViewHolder。由于此功能有时会导致出现上述错误消息(如果与proguard一起使用),它将在新版本中被删除,并由简单的getViewHolder方法取代。

@Override 
public ViewHolder getViewHolder(View v) { 
    return new ViewHolder(v); 
} 

这种新方法是用FastAdapter V2.5.0介绍:https://github.com/mikepenz/FastAdapter/blob/develop/MIGRATION.md#v250

对于旧版本的FastAdapter的,有一个ViewHolderFactory的概念,而(作为替代的自动检测,这是不是在你的情况下工作)提供ViewHolderFastAdapter

基本上你实现ViewHolderFactory和定义你的项目ViewHolderFactory

private static final ViewHolderFactory<? extends ViewHolder> FACTORY = new ItemFactory(); 

另外你需要以下条件:

/** 
* our ItemFactory implementation which creates the ViewHolder for our adapter. 
* It is highly recommended to implement a ViewHolderFactory as it is 0-1ms faster for ViewHolder creation, 
* and it is also many many times more efficient if you define custom listeners on views within your item. 
*/ 
protected static class ItemFactory implements ViewHolderFactory<ViewHolder> { 
    public ViewHolder create(View v) { 
     return new ViewHolder(v); 
    } 
} 

/** 
* return our ViewHolderFactory implementation here 
* 
* @return 
*/ 
@Override 
public ViewHolderFactory<? extends ViewHolder> getFactory() { 
    return FACTORY; 
} 

您可以在这里看到了整个事情: https://github.com/mikepenz/FastAdapter/blob/v2.2.0/app/src/main/java/com/mikepenz/fastadapter/app/items/IconItem.java#L24

作为替代调整ProGuard的规则也可以工作。

我的建议是更新到最新的FastAdapter版本之一,因为这已经大大简化和增强了。

+1

谢谢先生,我已经做到了,因为你说过,喜欢魅力.. –

相关问题