2017-06-30 3 views
0

Hallo Freunde ich hatte in diesem Problem von 2 Tagen Ich weiß nicht, was das Problem hier bin ich bin mit der Fast Adapter von mikepenz, wo ich zwei Recycler sehen in diesem. Hier ich diesen FehlerViewHolder mit einem Konstruktor, der eine Ansicht Recycler View

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) 

bin immer ich denke, ich das alles gesetzt hatte richtig, wie ich auch in anderen Klasse gleiche Format verwende, aber ich bin nur dieses Problem Klasse gegenüber nur und ich nicht die progurard aktiviert haben melden Sie sich bitte die folgenden Code

Hauptklasse:

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

Wo ist die onCreateViewHolder-Methode in der Adapterklasse? –

+0

Ich benutze den Fast Adapter von mikepenz Wir brauchen diese Methode nicht in dieser Bibliothek –

Antwort

0

Soweit ich sagen kann, dass Sie eine veraltete Version des FastAdapter verwenden, die noch eine Funktion aktiviert hatte, um automatisch die zur Verfügung gestellt ViewHolder zu erkennen. Da diese Funktionalität manchmal zu der obigen Fehlermeldung führt (wenn sie mit proguard verwendet wird), wurde sie in einer neueren Version entfernt und durch eine einfache getViewHolder Methode ersetzt. https://github.com/mikepenz/FastAdapter/blob/develop/MIGRATION.md#v250

Für ältere Versionen des FastAdapter, war es das Konzept eines ViewHolderFactory das würde (als Alternative zur automatischen Erkennung, die:

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

Dieser neue Ansatz mit dem FastAdapter v2.5.0 eingeführt wurde in Ihrem Fall funktioniert nicht) bieten die ViewHolder die zu FastAdapter

Grundsätzlich würden Sie die ViewHolderFactory implementieren und die ViewHolderFactory in Ihrem Element zu definieren.

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

Zusätzlich würden Sie folgende Voraussetzungen:

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

Sie die ganze Sache hier sehen können: https://github.com/mikepenz/FastAdapter/blob/v2.2.0/app/src/main/java/com/mikepenz/fastadapter/app/items/IconItem.java#L24

Als Alternative die proguard Regeln Anpassung könnte auch funktionieren.

Meine Empfehlung ist, auf eine der neuesten FastAdapter Releases zu aktualisieren, da dies stark vereinfacht und verbessert wurde.

+1

Danke Sir ich hatte es getan wie du gesagt hast und mag Charme .. –

Verwandte Themen