0

私はExpandable RecyclerViewを作成しています。問題は、私はArrayListのデータを持っているが、アダプタが設定されていないということです。拡張可能なRecyclerViewアダプタが設定されていません

arrayListNotiTypes.addの後にアダプタを設定してみました。新しいNotiTypes( "About SMS"、addNotiToParticularNotiType(jaSms、 "")));この行ですが、同じエラーが発生します。私は別のモジュールのためのこのタイプの拡張可能RecyclerViewを作った。そこでは正常に動作しています。

以下

私が試したものです。..

Notification_Activity.java

public class Notification_Activity extends AppCompatActivity { 

    // Widgets 
    private ProgressDialog progressDialog; 
    private RecyclerView recyclerView_Noti; 

    // Variables 
    private String url = "notification.php"; 
    private ArrayList<NotiTypes> arrayListNotiTypes; 
    private ArrayList<ActualNotis> arrayListActualNotis; 

    // Others 
    private AdapterNotification adapterNoti; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_notification); 

     find_view_by_id(); 
     init(); 

     if (Commom_Methods.isNetworkAvailable(this)) { 
      fetchData(); 
     } else { 
      Toast.makeText(this, "Please, Coonect to internet!!", Toast.LENGTH_SHORT).show(); 
     } 

     // Setting Adapter for Notification 
     adapterNoti = new AdapterNotification(Notification_Activity.this, arrayListNotiTypes); 
     recyclerView_Noti.setAdapter(adapterNoti); 
     recyclerView_Noti.setLayoutManager(new LinearLayoutManager(Notification_Activity.this)); 
    } 

    private void find_view_by_id() { 
     recyclerView_Noti = (RecyclerView) findViewById(R.id.recycle_noti); 
    } 

    private void init() { 
     arrayListNotiTypes = new ArrayList<>(); 
    } 

    private void fetchData() { 
     StringRequest stringReq = new StringRequest(Request.Method.POST, Constants.base_url + url, new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       Log.e("onResponse: ", response); 
       progressDialog.dismiss(); 
       if (response != null) { 
        try { 
         JSONObject jo = new JSONObject(response); 
         if (jo.has("success")) { 

          JSONObject joNoti = jo.getJSONObject("notification"); 

          /*JSONArray jaStu = joNoti.getJSONArray("noti_student"); 
          arrayListNotiTypes.add(new NotiTypes("About Student", addNotiToParticularNotiType(jaStu, "")));*/ 

          JSONArray jaBatch = joNoti.getJSONArray("noti_batch"); 
          arrayListNotiTypes.add(new NotiTypes("About Batch", addNotiToParticularNotiType(jaBatch, ""))); 

          JSONArray jaInst = joNoti.getJSONArray("noti_institute"); 
          arrayListNotiTypes.add(new NotiTypes("About Institute", addNotiToParticularNotiType(jaInst, "attach"))); 

          JSONArray jaFee = joNoti.getJSONArray("noti_fee"); 
          arrayListNotiTypes.add(new NotiTypes("About Fees", addNotiToParticularNotiType(jaFee, "attach"))); 

          JSONArray jaSms = joNoti.getJSONArray("noti_sms"); 
          arrayListNotiTypes.add(new NotiTypes("About SMS", addNotiToParticularNotiType(jaSms, ""))); 

         } else { 
          Toast.makeText(getApplicationContext(), jo.getString("error_msg"), Toast.LENGTH_LONG).show(); 
         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } else { 
        Toast.makeText(getApplicationContext(), "Server error! Don't get Data from server. Try again later.", Toast.LENGTH_LONG).show(); 
       } 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       progressDialog.dismiss(); 
       Toast.makeText(getApplicationContext(), "Error:" + error.getMessage(), Toast.LENGTH_LONG).show(); 
      } 
     }) { 
      @Override 
      protected Map<String, String> getParams() { 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put("id", Preferences.readString(getApplicationContext(), Preferences.KEY_SL_ID, "")); 
       params.put("tution_center_sl", Preferences.readString(getApplicationContext(), Preferences.KEY_TUTION_CENTER_SL, "")); 
       params.put("batch_sl", Preferences.readString(getApplicationContext(), Preferences.KEY_BATCH_SL, "")); 
       params.put("batch_grup_sl", Preferences.readString(getApplicationContext(), Preferences.KEY_BATCH_GRUP_SL, "")); 
       params.put("co_sl", Preferences.readString(getApplicationContext(), Preferences.KEY_CO_SL, "")); 
       params.put("drange_sl", Preferences.readString(getApplicationContext(), Preferences.KEY_DRANGE_SL, "")); 
       return params; 
      } 

      @Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 
       HashMap<String, String> headers = new HashMap<String, String>(); 
       headers.put("X-Apikey", Preferences.readString(getApplicationContext(), Preferences.KEY_USER_XAPIKEY, "")); 
       return headers; 
      } 
     }; 
     RequestQueue queue = Volley.newRequestQueue(this); 
     queue.add(stringReq); 

     progressDialog = new ProgressDialog(this); 
     progressDialog.setMessage("Loading..."); 
     progressDialog.show(); 
    } 

    private ArrayList<ActualNotis> addNotiToParticularNotiType(JSONArray jsonArray, String attachments) throws JSONException { 
     arrayListActualNotis = new ArrayList<>(); 
     if (jsonArray.length() > 0) { 
      for (int j = 0; j < jsonArray.length(); j++) { 
       JSONObject joInner = jsonArray.getJSONObject(j); 
       String notiTitle = joInner.getString("title"); 
       String notiDesc = joInner.getString("decription"); 
       String attach = ""; 
       if (!attachments.equals("")) 
        attach = joInner.getString("attach"); 
       arrayListActualNotis.add(new ActualNotis(notiTitle, notiDesc, attach)); 
      } 
     } else { 
      arrayListActualNotis.add(new ActualNotis("No Notifications!!", "", "")); 
     } 
     return arrayListActualNotis; 
    } 
} 

AdapterNotification.java

public class AdapterNotification extends ExpandableRecyclerViewAdapter<AdapterNotification.NotiTypesViewHolder, AdapterNotification.ActualNotisViewHolder> { 

    private Activity mActivity; 

    public AdapterNotification(Activity activity, List<? extends ExpandableGroup> groups) { 
     super(groups); 
     this.mActivity = activity; 
    } 

    @Override 
    public NotiTypesViewHolder onCreateGroupViewHolder(ViewGroup parent, int viewType) { 
     LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     View view = inflater.inflate(R.layout.noti_type_group_view_holder, parent, false); 
     return new NotiTypesViewHolder(view); 
    } 

    @Override 
    public ActualNotisViewHolder onCreateChildViewHolder(ViewGroup parent, int viewType) { 
     LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     View view = inflater.inflate(R.layout.actual_notis_child_view_holder, parent, false); 
     return new ActualNotisViewHolder(view); 
    } 

    @Override 
    public void onBindGroupViewHolder(NotiTypesViewHolder holder, int flatPosition, ExpandableGroup group) { 
     holder.setGroupName(group); 
    } 

    @Override 
    public void onBindChildViewHolder(ActualNotisViewHolder holder, int flatPosition, ExpandableGroup group, int childIndex) { 
     final ActualNotis notis = ((NotiTypes) group).getItems().get(childIndex); 
     holder.onBind(notis, group); 
    } 

    public class NotiTypesViewHolder extends GroupViewHolder { 

     private TextView txt_noti_type; 

     public NotiTypesViewHolder(View itemView) { 
      super(itemView); 
      txt_noti_type = (TextView) itemView.findViewById(R.id.txt_noti_type); 
     } 

     @Override 
     public void expand() { 
      txt_noti_type.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.up_arrow, 0); 
      Log.e("Adapter", "Expand"); 
     } 

     @Override 
     public void collapse() { 
      txt_noti_type.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.down_arrow, 0); 
      Log.e("Adapter", "collapse"); 
     } 

     public void setGroupName(ExpandableGroup group) { 
      txt_noti_type.setText(group.getTitle()); 
     } 
    } 

    public class ActualNotisViewHolder extends ChildViewHolder { 

     private TextView txt_noti, txt_noti_desc; 

     public ActualNotisViewHolder(View itemView) { 
      super(itemView); 
      txt_noti = (TextView) itemView.findViewById(R.id.txt_noti); 
      txt_noti_desc = (TextView) itemView.findViewById(R.id.txt_noti_desc); 
     } 

     public void onBind(ActualNotis actualNotis, ExpandableGroup group) { 
      switch (actualNotis.getmNotiTitle()) { 
       case "noti_student": 
        txt_noti.setText(actualNotis.getmNotiTitle()); 
        txt_noti_desc.setText(actualNotis.getmNotiDesc()); 
        break; 
       case "noti_batch": 
        txt_noti.setText(actualNotis.getmNotiTitle()); 
        txt_noti_desc.setText(actualNotis.getmNotiDesc()); 
        break; 
       case "noti_institute": 
        txt_noti.setText(actualNotis.getmNotiTitle()); 
        txt_noti_desc.setText(actualNotis.getmNotiDesc()); 
        break; 
       case "noti_fee": 
        txt_noti.setText(actualNotis.getmNotiTitle()); 
        txt_noti_desc.setText(actualNotis.getmNotiDesc()); 
        break; 
       case "noti_sms": 
        txt_noti.setText(actualNotis.getmNotiTitle()); 
        txt_noti_desc.setText(actualNotis.getmNotiDesc()); 
        break; 
       default: 
        break; 
      } 
     } 
    } 
} 

サーバー

からJSONレスポンス
{ 
    "notification": { 
    "noti_batch": [ 
     { 
     "title": "testtest", 
     "decription": "testtest" 
     } 
    ], 
    "noti_institute": [ 
     { 
     "title": "test", 
     "decription": "testtest", 
     "attach": "" 
     } 
    ], 
    "noti_fee": [ 
     { 
     "title": "test", 
     "decription": "test", 
     "attach": "" 
     } 
    ], 
    "noti_sms": [ 
     { 
     "title": "2016-11-03 00:00:00", 
     "decription": "" 
     } 
    ] 
    }, 
    "success": true 
} 

ありがとうございます!

答えて

2
すなわちonResponse内のサーバーからデータを取得した後

setAdapter()または、おかげでバディリスト

+0

内のデータを変更した後、アダプタを通知する必要があります!乾杯...! –

関連する問題