ListFragmentの一番上のアイテムを削除すると、一つ下のアイテムが一番上のアイテムに重なって表示されてしまいます。現在リストのアイテム数は2つあり、2つ目のアイテムのみを削除するとアイテム同士が重なったりということはないのですが、2つ目のアイテムの表示が少し薄くなります。
動作を見る限り実際アイテムは消されているが、描画が残ったままのように思います。
ListView#invalidateViews()や、Adapter#clear、Adapter#addAllなどを試したのですがどれもうまくいきません。どうすれば指定したListFragmentのアイテムを削除することができるでしょうか?下記にソースコードを記します。
Java
1public class IPCartProductData { 2 private Bitmap mProductImage; 3 private String mProductName; 4 private int mProductPrice; 5 6 public Bitmap getProductImage() { 7 return mProductImage; 8 } 9 10 public String getProductName() { 11 return mProductName; 12 } 13 14 public int getProductPrice() { 15 return mProductPrice; 16 } 17 18 public void setProductImage(Bitmap mProductImage) { 19 this.mProductImage = mProductImage; 20 } 21 22 public void setProductName(String mProductName) { 23 this.mProductName = mProductName; 24 } 25 26 public void setProductPrice(int mProductPrice) { 27 this.mProductPrice = mProductPrice; 28 } 29} 30 31 32public class IPCartFragment extends ListFragment { 33 public static IPCartProductAdapter adapter; 34 35 @Override 36 public void onViewCreated(View view, Bundle savedInstanceState) { 37 super.onViewCreated(view, savedInstanceState); 38 39 ListView cartListView = (ListView)view.findViewById(android.R.id.list); { 40 List<IPCartProductData> itemList = new ArrayList<>(); 41 42 IPCartProductData customCartData1 = new IPCartProductData(); 43 customCartData1.setProductImage(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)); 44 customCartData1.setProductName("ハンバーガー"); 45 customCartData1.setProductPrice(120); 46 47 IPCartProductData customCartData2 = new IPCartProductData(); 48 customCartData2.setProductImage(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)); 49 customCartData2.setProductName("コーラ"); 50 customCartData2.setProductPrice(80); 51 52 itemList.add(customCartData1); 53 itemList.add(customCartData2); 54 55 adapter = new IPCartProductAdapter(getActivity(), android.R.layout.simple_expandable_list_item_1, itemList); 56 57 cartListView.setAdapter(adapter); 58 } 59 } 60} 61 62 63public class IPCartProductAdapter extends ArrayAdapter <IPCartProductData> { 64 private static List<IPCartProductData> productData; 65 private LayoutInflater mLayoutInflater; 66 67 public IPCartProductAdapter(Activity activity, int textViewResourceId, List<IPCartProductData> objects) { 68 super(activity, textViewResourceId, objects); 69 70 productData = objects; 71 mLayoutInflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 72 } 73 74 @Override 75 public View getView(final int position, View convertView, final ViewGroup parent) { 76 IPCartProductData item = getItem(position); 77 78 if (null == convertView) { 79 convertView = mLayoutInflater.inflate(R.layout.list_item_cart, null); 80 } 81 82 ImageView productImageView = (ImageView)convertView.findViewById(R.id.imageViewProductImageInCart); { 83 productImageView.setImageBitmap(item.getProductImage()); 84 } 85 86 TextView productNameTextView = (TextView)convertView.findViewById(R.id.textViewProductNameInCart); { 87 productNameTextView.setText(item.getProductName()); 88 } 89 90 TextView productAmountTextView = (TextView)convertView.findViewById(R.id.textViewProductAmount); { 91 productAmountTextView.setText(String.valueOf(item.getAmountOfProduct())); 92 } 93 94 TextView productPriceTextView = (TextView)convertView.findViewById(R.id.textViewProductPriceInCart); { 95 productPriceTextView.setText(String.valueOf(item.getProductPrice())); 96 } 97 98 Button productDeleteButton = (Button)convertView.findViewById(R.id.buttonDeleteProductInCart); { 99 productDeleteButton.setOnClickListener(new View.OnClickListener() { 100 @Override 101 public void onClick(View v) { 102 productData.remove(position); 103 IPCartFragment.adapter.notifyDataSetChanged(); 104 105 } 106 }); 107 } 108 109 return convertView; 110 } 111}
ちなみに上記のコードのようにListFragmentを継承したIPCartFragmentのフィールドにstaticなカスタムアダプターの変数を置き、他のクラスでListViewのデータを変更した時にIPCartFragmentのstaticなカスタムアダプターの変数を参照して更新をかけるというやり方は正しいやり方でしょうか?(IPCartProductAdapterクラスのproductDeleteButtonのOnClickListener内で行っています)
色々と質問が多くて申し訳ないのですが、どなたか分かる方がいれば教えていただきたいです。
すみませんが、宜しくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/10/14 02:56
退会済みユーザー
2015/10/14 05:39 編集
2015/10/14 06:17
退会済みユーザー
2015/10/14 07:12
2015/10/14 08:43