2017-08-17 186 views
0

我想從另一個recyclerview適配器中填充recyclerview。什麼是錯的rv.setLayoutManager(new LinearLayoutManager(context))代碼在這一行控制檯輸出是打破:RecyclerView沒有填充

08-17 21:14:20.221 11999-11999/in.co.sd.app E/RecyclerView: No adapter attached; skipping layout 
08-17 21:14:20.227 11999-11999/in.co.sd.app V/BoostFramework: BoostFramework() : mPerf = [email protected] 
08-17 21:14:20.228 11999-11999/in.co.sd.app V/BoostFramework: BoostFramework() : mPerf = [email protected] 
08-17 21:14:20.230 11999-11999/in.co.sd.app E/RecyclerView: No adapter attached; skipping layout 
08-17 21:14:20.237 11999-11999/in.co.sd.app V/BoostFramework: BoostFramework() : mPerf = [email protected] 
08-17 21:14:20.237 11999-11999/in.co.sd.app V/BoostFramework: BoostFramework() : mPerf = [email protected] 
08-17 21:14:20.239 11999-11999/in.co.sd.app E/RecyclerView: No adapter attached; skipping layout 
08-17 21:14:20.244 11999-11999/in.co.sd.app V/BoostFramework: BoostFramework() : mPerf = [email protected] 
08-17 21:14:20.244 11999-11999/in.co.sd.app V/BoostFramework: BoostFramework() : mPerf = [email protected] 
08-17 21:14:20.247 11999-11999/in.co.sd.app E/RecyclerView: No adapter attached; skipping layout 
08-17 21:14:20.253 11999-11999/in.co.sd.app V/BoostFramework: BoostFramework() : mPerf = [email protected] 
08-17 21:14:20.253 11999-11999/in.co.sd.app V/BoostFramework: BoostFramework() : mPerf = [email protected] 
08-17 21:14:20.255 11999-11999/in.co.sd.app E/RecyclerView: No adapter attached; skipping layout 
08-17 21:14:20.260 11999-11999/in.co.sd.app V/BoostFramework: BoostFramework() : mPerf = [email protected] 
08-17 21:14:20.261 11999-11999/in.co.sd.app V/BoostFramework: BoostFramework() : mPerf = [email protected] 
08-17 21:14:20.263 11999-11999/in.co.sd.app E/RecyclerView: No adapter attached; skipping layout 
08-17 21:14:20.266 11999-11999/in.co.sd.app V/BoostFramework: BoostFramework() : mPerf = [email protected] 
08-17 21:14:20.266 11999-11999/in.co.sd.app V/BoostFramework: BoostFramework() : mPerf = [email protected] 
08-17 21:14:20.267 11999-11999/in.co.sd.app E/RecyclerView: No adapter attached; skipping layout 
08-17 21:14:40.197 11999-11999/in.co.sd.app D/AndroidRuntime: Shutting down VM 


                     --------- beginning of crash 
08-17 21:14:40.198 11999-11999/in.co.sd.app E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: in.co.servicedeal.app, PID: 11999 
                     java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)' on a null object reference 
                      at in.co.servicedeal.app.adapter.BrandAdapter$1.onClick(BrandAdapter.java:106) 
                      at android.view.View.performClick(View.java:5207) 
                      at android.view.View$PerformClick.run(View.java:21177) 
                      at android.os.Handler.handleCallback(Handler.java:742) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:154) 
                      at android.app.ActivityThread.main(ActivityThread.java:5527) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) 


                     --------- beginning of system 
08-17 21:14:40.201 11999-11999/in.co.sd.app E/MQSEventManagerDelegate: failed to get MQSService. 
08-17 21:14:40.242 11999-11999/in.co.sd.app I/Process: Sending signal. PID: 11999 SIG: 9 

適配器代碼

public class BrandAdapter extends BaseAdapter { 

    private LayoutInflater layoutInflater; 
    private Context context; 
    private ArrayList<BrandBean> brandList; 
    private RecyclerView rv; 


    public BrandAdapter(final Context context, final ArrayList<BrandBean> brandList) { 
     this.context = context; 
     this.brandList = brandList; 
    } 

    @Override 
    public int getCount() { 
     return brandList.size(); 
    } 

    @Override 
    public Object getItem(int i) { 
     return brandList.get(i).getId(); 
    } 

    @Override 
    public long getItemId(int i) { 
     return 0; 
    } 

    @Override 
    public View getView(final int i, View view, ViewGroup viewGroup) { 
     layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (view == null) { 
      view = layoutInflater.inflate(R.layout.item_brand_service_grid, null); 

      //Grid Text 
      final TextView gridText = view.findViewById(R.id.brand_grid_text); 
      gridText.setText(brandList.get(i).getServiceType()); 

      //Grid Arraw 
      final ImageView gridArrow = view.findViewById(R.id.brand_grid_arrow); 

      gridArrow.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        //Grid Dropdown 
        rv = view.findViewById(R.id.recycler_view_SI); 

        rv.setLayoutManager(new LinearLayoutManager(context)); 
        getProductDetailsByProductId(brandList.get(i).getId()); 
       } 
      }); 
     } 
     return view; 
    } 

的想法是實現這一佈局:

enter image description here

其中白色空間將包含recyclerView內容。

+0

Probaby這一行返回一個空對象_rv = view.findViewById(R.id.recycler_view_SI); _ –

+0

是的,我在日誌中看到,但不知道爲什麼,我已經在那條線的上方實例化了recyclerView。 –

+0

你有ViewHolder類嗎?另外你爲什麼要擴展BaseAdapter而不是RecyclerView.Adapter? – Juan

回答

1

由於Onclick方法中視圖的名稱與getView方法中視圖的名稱相同,因此視圖的onclick方法會覆蓋父視圖,這就是爲什麼出現錯誤的原因。 爲了避免空指針異常只是改變即

view1.gridArrow.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View **view1**) { 
        //Grid Dropdown 
        rv = view.findViewById(R.id.recycler_view_SI); 

        rv.setLayoutManager(new LinearLayoutManager(context)); 
        getProductDetailsByProductId(brandList.get(i).getId()); 
       } 
      }); 

建議的onclick查看名稱:您可以使用ExpandableListView您的需求,它是易於管理。

+0

它工作,謝謝 –