2017-04-04 3 views
-1

をスクロールでそれらを確認するには、私のクラスのコードは次のとおりです。ここでチェックボックスを自動でマイCustomListviewここ

class ExtrasPreviewClass 
{ 
    [PrimaryKey] 

    public int id { get; set; } 
    public string ExtrasName { get; set; } 
    public string ExtrasCheckBox { get; set; } 
    public string ExtrasPrice { get; set; } 

} 

は私のxmlファイルは

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:minWidth="25px" 
android:weightSum="100" 
android:minHeight="25px"> 
<RelativeLayout 
    android:minWidth="25px" 
    android:minHeight="25px" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/relativeLayout1"> 
    <TextView 
     android:text="Εξτρα" 
     android:layout_width="200dp" 
     android:layout_height="30dp" 
     android:layout_alignParentLeft="true" 
     android:id="@+id/txtExtrasName" 
     android:textSize="20sp" /> 
    <TextView 
     android:text="Τιμή" 
     android:layout_width="50dp" 
     android:layout_height="30dp" 
     android:layout_marginLeft="260dp" 
     android:id="@+id/txtExtrasPrice" 
     android:textSize="20sp" /> 
    <TextView 
     android:text="ID" 
     android:layout_width="50dp" 
     android:layout_height="30dp" 
     android:layout_marginLeft="450dp" 
     android:id="@+id/txtExtrasID" 
     android:textSize="20sp" /> 
    <CheckBox 
     android:layout_width="50dp" 
     android:layout_alignParentRight="true" 
     android:layout_height="30dp" 
     android:id="@+id/txtExtrasCheckBox" 
     android:textSize="20sp" 
     android:focusable="false" 
     android:focusableInTouchMode="false" /> 
    </RelativeLayout> 
    </LinearLayout> 

されており、ここで私のカスタムリストビューアダプタは

namespace WiOrderAndroid 
{ 
class MyListViewAdapterExtras : BaseAdapter<ExtrasPreviewClass> 
{ 
    public List<ExtrasPreviewClass> mitems; 
    private Context mContext; 
    public MyListViewAdapterExtras(Context context, List<ExtrasPreviewClass> items) 
    { 
     mitems = items; 
     mContext = context; 

    } 
    public override int Count 
    { 
     get 
     { 
      return mitems.Count; 
     } 
    } 
    public override long GetItemId(int position) 
    { 
     return position; 
    } 
    public override ExtrasPreviewClass this[int position] 
    { 
     get 
     { 
      return mitems[position]; 
     } 

    } 

    public override View GetView(int position, View convertView, ViewGroup parent) 
    { 
     string dpPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "student.db3"); 
     var db = new SQLiteConnection(dpPath); 
     db.CreateTable<ExtrasPreviewClass>(); 



     View row = convertView; 
     if (row == null) 
     { 
      row = LayoutInflater.From(mContext).Inflate(Resource.Layout.ExtrasPreview, null, false); 

     } 



     TextView txtExtrasName = row.FindViewById<TextView>(Resource.Id.txtExtrasName); 
     txtExtrasName.Text = mitems[position].ExtrasName; 
     CheckBox txtExtrasCheckBox = row.FindViewById<CheckBox>(Resource.Id.txtExtrasCheckBox); 
     txtExtrasCheckBox.Text =mitems[position].ExtrasCheckBox; 
     TextView txtExtrasID = row.FindViewById<TextView>(Resource.Id.txtExtrasID); 
     txtExtrasID.Text = Convert.ToString(mitems[position].id); 
     TextView txtExtrasPrice = row.FindViewById<TextView>(Resource.Id.txtExtrasPrice); 
     txtExtrasPrice.Text = Convert.ToString(mitems[position].ExtrasPrice); 


     db.DeleteAll<ExtrasPreviewClass>(); 
     Connection.Extras = ""; 


     txtExtrasCheckBox.Click += delegate 
     { 
      if (txtExtrasCheckBox.Checked == true) 
      { 
       ExtrasPreviewClass tbl = new ExtrasPreviewClass(); 

       tbl.ExtrasName = txtExtrasName.Text; 
       tbl.id = Convert.ToInt32(txtExtrasID.Text); 
       db.Insert(tbl); 

       double a, b, c; 
       a = double.Parse(Connection.RetailPrice); 
       b = double.Parse(txtExtrasPrice.Text); 
       c = a + b; 
       Connection.RetailPrice = c.ToString(); 


      } 
      else 
      { 

       var data = db.Table<ExtrasPreviewClass>(); 
       int idvalue = Convert.ToInt32(txtExtrasID.Text); 

       var data1 = data.Where(x => x.id == idvalue).FirstOrDefault(); 

       if (data1.id != null) 
       { 
        db.Delete(data1); 


       } 
       double a, b, c; 
       a = double.Parse(Connection.RetailPrice); 
       b = double.Parse(txtExtrasPrice.Text); 
       c = a - b; 
       Connection.RetailPrice = c.ToString(); 
      } 
     }; 

     return row; 
です

問題は、もし私が自分のチェックボックスをチェックしてスクロールすると、チェックボックスが表示されます自動的にチェックされました。また、私はsqliteを使用しています、そして、私のテーブルの中に重複した値を挿入します。なぜこれが起こりますか?

+0

チェックはあなたの問題を解決するために、この - http://www.androprogrammer.com/2013/10/list-view-with-check-box-using-custom.html – androidnoobdev

答えて

1

ExtrasPreviewClassクラスに変数booleanを1つ追加する必要があります。選択した項目と選択していない項目のリストの位置に応じて状態を維持します。

この変数の値をチェックボックスで設定し、特定のリスト項目のbeanクラスのフラグ値を更新するのではなく、更新するのはCheckBoxです。

http://www.mysamplecode.com/2012/07/android-listview-checkbox-example.html

holder.name.setChecked(country.isSelected()); 

れるgetView関数の下に表示される名前は、チェックボックスオブジェクトとフラグ値がデータリスト項目である国のオブジェクトから取得されています。

とのonClick listenarは

country.setSelected(cb.isChecked()); 

フラグがデータリストにChekBox値からリセットされたときに実行されます。

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder holder = null; 
    Log.v("ConvertView", String.valueOf(position)); 

    if (convertView == null) { 
    LayoutInflater vi = (LayoutInflater)getSystemService(
    Context.LAYOUT_INFLATER_SERVICE); 
    convertView = vi.inflate(R.layout.country_info, null); 

    holder = new ViewHolder(); 
    holder.code = (TextView) convertView.findViewById(R.id.code); 
    holder.name = (CheckBox) convertView.findViewById(R.id.checkBox1); 
    convertView.setTag(holder); 

    holder.name.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     CheckBox cb = (CheckBox) v ; 
     Country country = (Country) cb.getTag(); 
     Toast.makeText(getApplicationContext(), 
     "Clicked on Checkbox: " + cb.getText() + 
     " is " + cb.isChecked(), 
     Toast.LENGTH_LONG).show(); 
     country.setSelected(cb.isChecked()); 
    } 
    }); 
    } 
    else { 
    holder = (ViewHolder) convertView.getTag(); 
    } 

    Country country = countryList.get(position); 
    holder.code.setText(" (" + country.getCode() + ")"); 
    holder.name.setText(country.getName()); 
    holder.name.setChecked(country.isSelected()); 
    holder.name.setTag(country); 

    return convertView; 

    } 

} 
+0

は先生ありがとう、あなたは私を与えることができます例?あなたは私のチェックボックスをブール値にすることを意味しますか? public boolean ExtrasCheckBox {get;セット; } ???/ – Dim

+0

他のデータのようにデータリストに 'paramaeter'を1つ入れ、' CheckBox'に 'boolean'値を設定する必要はありません。 –

+0

私に例を挙げてもらえますか?このような意味ですか?クラスExtrasPreviewClass { [PrimaryKey] public int id {get;セット; } 公開ストリングExtrasName {get;セット; } 公開ストリングExtrasCheckBox {get;セット; } 公開ストリングExtrasPrice {get;セット; } パブリックブールCheckboxState {get;セット; } } – Dim

関連する問題