2017-09-06 67 views
0

我在我的活动中有Spinner,EditTextRecyclerView。一切都很好,但有时我的recyclerView不可见,直到我点击我的活动中的EditText。我调试我的代码一切都通过适配器RecyclerView未显示

private void createRecycler(ArrayList<ProductNLCModel> productNLCModels) { 
    rcycler_productlist.setVisibility(View.VISIBLE); 
    rcycler_productlist.setHasFixedSize(true); 
    SnapHelper snapHelper = new PagerSnapHelper(); 
    rcycler_productlist.setOnFlingListener(null); 
    snapHelper.attachToRecyclerView(rcycler_productlist); 
    LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false); 
    rcycler_productlist.setLayoutManager(layoutManager); 
    product_name = et_productname.getText().toString(); 
    PlaceOrderAdapter placeOrderAdapter = new PlaceOrderAdapter(productNLCModels, PlaceOrder.this, this, PlaceOrder.this, main_category, product_name); 
    rcycler_productlist.setAdapter(placeOrderAdapter); 
    placeOrderAdapter.notifyDataSetChanged(); 
    placeOrderAdapter.notifyItemInserted(productNLCModels.size()); 
    rcycler_productlist.smoothScrollToPosition(0); 
    placeOrderAdapter.setClickListener(this); 
    et_productname.requestFocus(); 

} 

上面是我的方法传递数据到recyclerView。它加载数据到我的Recyclerview,但我不知道,由于一些原因,它没有显示,但是当我点击我的EDITTEXT RecyclerView显示数据

清单中我已经补充说:

<activity 
      android:name=".PlaceOrder" 
      android:configChanges="orientation" 
      android:screenOrientation="portrait" 
      android:windowSoftInputMode="stateAlwaysHidden" 
      android:launchMode="singleTask"/> 
下面

是我的XML:

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:padding="@dimen/margin_10"> 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center_vertical" 
      android:text="Search Product via(Category or Compatibility)" 
      android:textColor="@color/black" 
      android:textSize="@dimen/margin_16" 

      /> 

     <Spinner 
      android:id="@+id/spinner_category" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@drawable/spinner_background" /> 

     <android.support.design.widget.TextInputLayout 
      android:id="@+id/txtinput_productname" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/shadow_logo" 
      android:theme="@style/TextLabel"> 

      <EditText 
       android:id="@+id/et_productname" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:hint="Product Name" 
       android:drawableRight="@drawable/searchdrawable" 
       android:inputType="text" 
       android:textSize="@dimen/margin_18" /> 
     </android.support.design.widget.TextInputLayout> 

     <!--<Button--> 
     <!--android:id="@+id/btn_search"--> 
     <!--android:layout_width="wrap_content"--> 
     <!--android:layout_height="wrap_content"--> 
     <!--android:layout_gravity="end"--> 
     <!--android:layout_marginRight="@dimen/margin_10"--> 
     <!--android:layout_marginTop="@dimen/margin_30"--> 
     <!--android:background="@color/colorPrimaryDarker"--> 
     <!--android:textColor="@color/white"--> 
     <!--android:textSize="13sp"--> 
     <!--android:padding="@dimen/margin_10"--> 
     <!--android:text="Search"/>--> 

     <android.support.v7.widget.RecyclerView 
      android:id="@+id/rcycler_productlist" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_marginTop="@dimen/margin_3" 
      android:focusableInTouchMode="true" 
      android:descendantFocusability="beforeDescendants" 
      android:windowSoftInputMode="stateHidden|adjustPan" 
      android:orientation="horizontal"/> 


    </LinearLayout> 

我打电话从响应的WebAPI这种方法:

私人无效getProductList(字符串str)抛出JSONException { ProductNLCModel productNLCModel = null;

JSONArray jsonArray = new JSONArray(str); 
for (int i = 0; i < jsonArray.length(); i++) { 
    productNLCModel = new ProductNLCModel(); 
    JSONObject productJson = jsonArray.optJSONObject(i); 
    productNLCModel.setCategory(productJson.optString(WebKeys.Key_Category)); 
    productNLCModel.setS_no(productJson.optString(WebKeys.Sno)); 
    productNLCModel.setProductId(productJson.optString(WebKeys.ProductId)); 
    productNLCModel.setImagePath(productJson.optString(WebKeys.ImagePath)); 


    productNLCModel.setProductName(productJson.optString(WebKeys.Key_ProductName)); 
     productNLCModel.setCompatible(productJson.optString(WebKeys.Compatible)); 
     productNLCModel.setSpecification(productJson.optString(WebKeys.Specification)); 
     productNLCModel.setMRP(productJson.optString(WebKeys.MRP)); 
     productNLCModel.setDP(productJson.optString(WebKeys.DP)); 
     productNLCModel.setNLC(productJson.optString(WebKeys.NLC)); 
     if (i == 0) { 
      JSONArray categoryDetailArray = productJson.optJSONArray(WebKeys.GetCategoryDetail); 
      for (int j = 0; j < categoryDetailArray.length(); j++) { 
       JSONObject discountstructure = categoryDetailArray.optJSONObject(j); 
       str_categorydetail = str_categorydetail + discountstructure.optString(WebKeys.Turnover) + "@" + discountstructure.optString(WebKeys.Discount) + "%,"; 
      } 

     } 

     productNLCModels.add(productNLCModel); 
    } 

    if(jsonArray.length()>0){ 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        category_detail.setSelected(true); 
        str_categorydetail = str_categorydetail.substring(0, str_categorydetail.length() - 1); 
        category_detail.setText(str_categorydetail); 
       } catch (Exception e) { 
        e.printStackTrace(); 

       } 
       createRecycler(productNLCModels); 
      } 
     }); 
    } 

} 
+0

为什么你有这条线et_productname.requestFocus(); 尝试删除它 – Pulkit

+0

我以后添加了它,因为我点击edittext时显示的recyclerview,所以我认为通过请求焦点它可以完成 –

+0

您添加了android:focusableInTouchMode =“true”和android:descendantFocusability =“beforeDescendants”也因为它? – Pulkit

回答

0

这可能是由于回收站视图中的平滑滚动问题而发生的,因为它会更改您的回收站视图的焦点。尝试删除或删除

rcycler_productlist.smoothScrollToPosition(0); 
3

您应该删除rcycler_productlist.smoothScrollToPosition(0);并重试。

貌似placeOrderAdapter.notifyDataSetChanged();placeOrderAdapter.notifyItemInserted(productNLCModels.size());这两个语句只有一个意义,同时所通知的数据集,然后你通知插入的数据,相反,你只需要只写placeOrderAdapter.notifyItemInserted(productNLCModels.size());并删除notifyDataSetChanged();

+0

rcycler_productlist.smoothScrollToPosition(0)我已经添加了这一行,因为它始终关注最后一项 –

+0

我认为rcycler_productlist.smoothScrollToPosition(0)导致该问题,我删除它它工作,但我不明白为什么它导致此问题 –

+0

其实recyclerview不适用于scrollToPosition(pos),但滚动recyclerview的实际方法是使用LinearLayoutManager.scrollToPositionWithOffset(int,int)。 试着让它正确。 –