notifyDataSetChanged();在android中的ExpandableRecyclerAdapter中不起作用

时间:2016-05-14 04:03:49

标签: android

我正在使用此链接在我的项目中实现expandableRecyclerView。

https://www.bignerdranch.com/blog/expand-a-recyclerview-in-four-steps/

到目前为止,这是我的代码。

public class ActivityProductList extends AppCompatActivity {

  private android.support.v7.widget.SearchView searchView = null;
  private RecyclerView recyclerView;
  MyAdapter adapter;
  List<ParentListItem> parentListItems = new ArrayList<>();
  List<ParentListItem> originalProductList = new ArrayList<>();
  String keyword = null;
  int categoryId = 0;

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

      Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
      setSupportActionBar(toolbar);
      getSupportActionBar().setTitle("PRODUCTS");
      getSupportActionBar().setDisplayHomeAsUpEnabled(true);

      recyclerView = (RecyclerView) findViewById(R.id.crime_recycler_view);
      recyclerView.setLayoutManager(new LinearLayoutManager(this));
      adapter = new MyAdapter(this, originalProductList);
      //adapter.onRestoreInstanceState(savedInstanceState);
      recyclerView.setAdapter(adapter);
      getProducts();
  }

  private void getProducts() {
      originalProductList.clear();
      originalProductList.addAll(Utility.getParentListItems());
      Utility.displayToast("in fetch: " + originalProductList.size());
      adapter.addData(originalProductList);
  }


  public class MyAdapter extends ExpandableRecyclerAdapter<MyAdapter.ProductParentViewHolder, MyAdapter.ProductChildViewHolder> {

      private LayoutInflater mInflater;
      private Context context;
      private List<? extends ParentListItem> mParentItemList;

      public MyAdapter(Context context, List<ParentListItem> itemList) {
          super(itemList);
          mInflater = LayoutInflater.from(context);
          this.context = context;
          this.mParentItemList = itemList;
      }

      public void addData(List<ParentListItem> itemList) {
          this.mParentItemList = itemList;
          notifyDataSetChanged();
      }

     @Override
      public ProductParentViewHolder onCreateParentViewHolder(ViewGroup viewGroup) {
          View view = mInflater.inflate(R.layout.list_item_crime_parent, viewGroup, false);
          return new ProductParentViewHolder(view);
      }

      @Override
      public ProductChildViewHolder onCreateChildViewHolder(ViewGroup viewGroup) {
          View view = mInflater.inflate(R.layout.list_item_crime_child, viewGroup, false);
          return new ProductChildViewHolder(view);
      }

      @Override
      public void onBindParentViewHolder(ProductParentViewHolder crimeParentViewHolder, int i, ParentListItem parentListItem) {
          Product product = (Product) parentListItem;
          crimeParentViewHolder.productName.setText(product.getBrandName() + " " + product.getProductName());
          Glide.with(context)
                  .load(product.getProductImagePath())
                  .placeholder(R.drawable.placeholder)
                  .error(R.drawable.placeholder)
                  .into(crimeParentViewHolder.thumbnail);
      }

      @Override
      public void onBindChildViewHolder(ProductChildViewHolder productChildViewHolder, int i, Object childListItem) {
          final ProductVariant productVariant = (ProductVariant) childListItem;
          productChildViewHolder.mCrimeDateText.setText(productVariant.getVariantName());
          productChildViewHolder.variantMrp.setText(productVariant.getMRP().toString());
          productChildViewHolder.variantSellPrice.setText(productVariant.getSellPrice().toString());
      }

      public class ProductParentViewHolder extends ParentViewHolder {
          private static final float INITIAL_POSITION = 0.0f;
          private static final float ROTATED_POSITION = 180f;
          private final boolean HONEYCOMB_AND_ABOVE = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;

          public TextView productName;
          public ImageView thumbnail;
          public ImageButton mParentDropDownArrow;

          public ProductParentViewHolder(View itemView) {
              super(itemView);

              productName = (TextView) itemView.findViewById(R.id.productName);
              thumbnail = (ImageView) itemView.findViewById(R.id.thumbnail);
              // mParentDropDownArrow = (ImageButton) itemView.findViewById(R.id.parent_list_item_expand_arrow);
          }

          @SuppressLint("NewApi")
          @Override
          public void setExpanded(boolean expanded) {
              super.setExpanded(expanded);
              if (!HONEYCOMB_AND_ABOVE) {
                  return;
              }

              if (expanded) {
                  // mParentDropDownArrow.setRotation(ROTATED_POSITION);
              } else {
                  // mParentDropDownArrow.setRotation(INITIAL_POSITION);
              }
          }
      }

      public class ProductChildViewHolder extends ChildViewHolder {

          public TextView mCrimeDateText;
          public TextView variantMrp;
          public TextView variantSellPrice;
          public Button btnProductDetailAddToCart, btnProductDetailPlus, btnProductDetailMinus, btnProductDetailQty;


          public ProductChildViewHolder(View itemView) {
              super(itemView);

              mCrimeDateText = (TextView) itemView.findViewById(R.id.variantName);
              variantMrp = (TextView) itemView.findViewById(R.id.productVariantMrp);
              variantSellPrice = (TextView) itemView.findViewById(R.id.productVariantSellPrice);
              btnProductDetailAddToCart = (Button) itemView.findViewById(R.id.btnProductDetailAddToCart);
              btnProductDetailPlus = (Button) itemView.findViewById(R.id.btnProductDetailPlus);
              btnProductDetailMinus = (Button) itemView.findViewById(R.id.btnProductDetailMinus);
              btnProductDetailQty = (Button) itemView.findViewById(R.id.btnProductDetailQty);

          }
      }
  }
}

问题在于getProducts()。我正确地获取数据并将其传递给适配器并调用notifyDataSetChanged();在适配器。但是UI没有得到更新。

任何人都可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

根据我对你的代码的理解,你在适配器中调用适配器通知,这可能无法刷新listview。

所以使用下面的代码,它会起作用。注释addData()方法。

   private void getProducts() {
         originalProductList.clear();
         originalProductList.addAll(Utility.getParentListItems());
         Utility.displayToast("in fetch: " + originalProductList.size());
         //adapter.addData(originalProductList);
         adapter.notifyDataSetChanged()
   }

答案 1 :(得分:0)

addData()内的adapter方法中,更改此行代码,

 this.mParentItemList = itemList;

this.mParentItemList.addAll(itemList);

然后拨打notifyDataSetChanged()

答案 2 :(得分:0)

试试这个:

public class MyAdapter extends ExpandableRecyclerAdapter<MyAdapter.ProductParentViewHolder, MyAdapter.ProductChildViewHolder> {

  private LayoutInflater mInflater;
  private Context context;
  private List<ParentListItem> mParentItemList;

  public MyAdapter(Context context, List<ParentListItem> itemList) {
      super(itemList);
      mInflater = LayoutInflater.from(context);
      this.context = context;
      this.mParentItemList = itemList;
  }

  public void addData(List<ParentListItem> itemList) {
      this.mParentItemList = itemList;
      notifyDataSetChanged();
  }