2016-10-08 18 views
0

ListViewを使用して、一部の行にTextViewsを表示します。どれくらいのアイテムがあるのか​​分かりませんが、うまく動作しますが、スクロールするとディスプレイが変わります。Android ListViewスクロール時のデータ消失

私は、ユーザーがレポートや投票を記入するアプリケーションに取り組んでいます。あるアクティビティでは、子にEditTexts、Checkbox、TextViewがあるListViewがあります。

EditTextsとCheckboxの問題は、スクロールするときにコンテンツが失われてしまうことです。チェックステータスを配列に保存してチェックボックスの問題を修正することができましたが、問題をEditTextで解決できません。私はこの特定の問題についていくつかの質問があることを知っていますが、彼らが提供した解決策はうまくいかないようです。

このBaseAdapterを使用しています。

public class ProductAdapter extends BaseAdapter { 

private Context mContext; 
private List<Model> models = new ArrayList<>(); 
private ModelTable avModelTable = new ModelTable(); 
private BrandTable brandTable = new BrandTable(); 

public ProductAdapter(Context mContext, List<Model> models) { 
    this.mContext = mContext; 
    this.models = models; 

} 


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

@Override 
public Model getItem(int i) { 
    return models.get(i); 
} 

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


@Override 
public View getView(int i, View view, ViewGroup viewGroup) { 

    ProductHolder item = new ProductHolder(); 
    View row = view; 
    if (row == null) { 

     LayoutInflater mInflater = (LayoutInflater) mContext 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     row = mInflater.inflate(R.layout.product_item, viewGroup, false); 

     item.nameProduct = (TextView) row.findViewById(R.id.nameProduct); 
     item.subCategoryProduct = (TextView) row.findViewById(R.id.subCategoryProduct); 
     item.productGroup = (RadioGroup) row.findViewById(R.id.groupRadioProduct); 
     item.oos_product = (RadioButton) row.findViewById(R.id.oos_product); 
     item.av_product = (RadioButton) row.findViewById(R.id.av_product); 
     item.shelfProduct = (EditText) row.findViewById(R.id.shelfProduct); 
     item.quantityProduct = (EditText) row.findViewById(R.id.quantityProduct); 
     item.priceProduct = (EditText) row.findViewById(R.id.priceProduct); 
     item.layoutBrand = (LinearLayout) row.findViewById(R.id.layoutBrand); 
     item.avBrand = (EditText) row.findViewById(R.id.avBrand); 


     row.setTag(item); 
    } else { 
     item = (ProductHolder) row.getTag(); 
    } 

    final Model model = models.get(i); 

    item.nameProduct.setText(model.getProduct_name()); 
    item.subCategoryProduct.setText(brandTable.getBrandName(model.getBrand_id())); 

    if (model.getQuantity() != 0) { 
     item.quantityProduct.setText(String.valueOf(model.getQuantity())); 
    } 
    if (model.getShelf() != 0) { 
     item.shelfProduct.setText(String.valueOf(model.getShelf())); 
    } 

    if (model.getPrice() != null) { 
     item.priceProduct.setText(model.getPrice()); 
    } 

    if (model.getBrand_id() == 1) { 

     item.layoutBrand.setVisibility(View.GONE); 
     item.avBrand.setVisibility(View.GONE); 
     item.productGroup.setVisibility(View.VISIBLE); 
     item.oos_product.setVisibility(View.VISIBLE); 
     item.av_product.setVisibility(View.VISIBLE); 

     switch (model.getAv()) { 
      case 0: 
       item.oos_product.setChecked(true); 
       break; 
      case 1: 
       item.av_product.setChecked(true); 
       break; 
      default: 
       break; 
     } 

     item.productGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(RadioGroup radioGroup, int i) { 
       switch (i) { 
        case R.id.oos_product: 
         avModelTable.updateAv(model.getId(), 0); 
         break; 
        case R.id.av_product: 
         avModelTable.updateAv(model.getId(), 1); 
         break; 
        default: 
         break; 
       } 

      } 

     }); 


    } else { 


     item.layoutBrand.setVisibility(View.VISIBLE); 
     item.avBrand.setVisibility(View.VISIBLE); 
     item.productGroup.setVisibility(View.GONE); 
     item.oos_product.setVisibility(View.GONE); 
     item.av_product.setVisibility(View.GONE); 


     item.avBrand.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
              int arg3) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void afterTextChanged(Editable arg0) { 
       // TODO Auto-generated method stub 
       if (arg0.toString().equals("")) { 
        avModelTable.updateAv(model.getId(), 0); 
       } else avModelTable.updateAv(model.getId(), Integer.parseInt(arg0.toString())); 

      } 
     }); 

    } 


    item.shelfProduct.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
             int arg3) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable arg0) { 
      // TODO Auto-generated method stub 
      if (arg0.toString().equals("")) { 
       avModelTable.updateShelf(model.getId(), 0); 
      } else avModelTable.updateShelf(model.getId(), Integer.parseInt(arg0.toString())); 

     } 
    }); 

    item.quantityProduct.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
             int arg3) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable arg0) { 
      // TODO Auto-generated method stub 
      if (arg0.toString().equals("")) { 
       avModelTable.updateQuantity(model.getId(), 0); 
      } else 
       avModelTable.updateQuantity(model.getId(), Integer.parseInt(arg0.toString())); 

     } 
    }); 

    item.priceProduct.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
             int arg3) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable arg0) { 
      // TODO Auto-generated method stub 
      if (arg0.toString().equals("")) { 
       avModelTable.updatePrice(model.getId(), null); 
      } else 
       avModelTable.updatePrice(model.getId(), arg0.toString()); 

     } 
    }); 


    return row; 
} 


private class ProductHolder { 
    private TextView nameProduct, subCategoryProduct; 
    private RadioButton oos_product, av_product; 
    private RadioGroup productGroup; 
    private EditText shelfProduct, quantityProduct, priceProduct, avBrand; 
    private LinearLayout layoutBrand; 

} 

}

+0

あなたはそれのための解決策を得ましたか?私はここで同じ問題を抱えています:( –

答えて

0

私はあなたのアダプターを使用してテストコードをしたが、異なるビュー/モデルと、それを試してみましたが、それはうまくいきませんでした。それは私が交換した後にのみ働いたView row = view; getViewメソッドの開始時にView row = null;と入力し、毎回コードを強制的に膨張させます。だから私は問題がitem = (ProductHolder) row.getTag();部分にあると信じている。おそらくProductHolderモデルが正しくない可能性があります。

関連する問題