2015-11-26 64 views
0

我有一個處理列表視圖的自定義數組適配器。 每行有兩個複選框。共有五排。 我希望能算勾選複選框的數量,然後顯示這個數字在Stand1如何統計在列表視圖中勾選的複選框的數量

所以基本上項目佈局是這樣

裏面stand1有一個列表視圖和文本視圖。 stand1.java調用一個名爲CustomArrayAdaptor的數組適配器。 我想能夠統計點擊複選框的數量並將該數據發送回stand1

我對android開發非常陌生,所以如果有人能夠把我推向正確的方向,那將是很棒的。

這裏是我的代碼

Stand1.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" android:layout_height="match_parent"> 

<ListView 
    android:layout_width="fill_parent" 
    android:layout_height="446dp" 
    android:id="@+id/Stand1list" 
    android:scrollIndicators="right" 
    android:smoothScrollbar="true"> 


</ListView> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Send Score To Databse" 
     android:id="@+id/sendtodb" 
     android:textSize="12dp" 
     android:clickable="true" 
     android:layout_below="@+id/Stand1list" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="8/10" 
     android:id="@+id/Score" 
     android:layout_marginLeft="33dp" 
     android:layout_marginStart="33dp" 
     android:layout_alignBottom="@+id/sendtodb" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_marginBottom="10dp" /> 

Row_Layout1.xml

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="20dp"> 


    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/textelement" 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:textSize="30dp" 
     android:textStyle="bold" 
     android:longClickable="false" /> 

    <CheckBox 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:id="@+id/Checkbox1" 
     android:button="@drawable/checkboxcustom" 
     android:layout_marginLeft="50dp" /> 
    <CheckBox 

     android:button="@drawable/checkboxcustom" 
     android:id="@+id/Checkbox2" 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:layout_marginLeft="50dp" /> 

</LinearLayout> 

斯坦d1.java

public class Stand1 extends Fragment { 
    ListView mList; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View root = inflater.inflate(R.layout.stand1,container,false); 
     mList = (ListView) root.findViewById(R.id.Stand1list); 
     return root; 
    } 

    public void onActivityCreated(Bundle savedInstanceState) 
    { 
     super.onActivityCreated(savedInstanceState); 
     populateListView(); 
    } 

    private void populateListView() { 
     String[] pair = {"Pair 1","Pair 2","Pair 3","Pair 4","Pair 5"}; 

     //build adapter 
     ArrayAdapter<String> adapter = new CustomArrayAdaptor(getActivity(),pair); 

     mList.setAdapter(adapter); 
    } 
} 

CustomArrayAdaptor.java

public class CustomArrayAdaptor extends ArrayAdapter<String>{ 


    public CustomArrayAdaptor(Context context, String [] Pairs) { 
     super(context, R.layout.row_layout1, Pairs); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = LayoutInflater.from(getContext()); 
     View CustomView = inflater.inflate(R.layout.row_layout1, parent, false); 
     String stringelement = getItem(position); 
     TextView Text= (TextView)CustomView.findViewById(R.id.textelement); 

     Text.setText(stringelement); 
     return CustomView; 
    } 




} 

感謝鄉親

+1

您需要跟蹤自定義適配器中的選中狀態。類似於http://stackoverflow.com/a/28408710/995891 - 然後簡單地計算'checkboxState'中的'true'。 – zapl

回答

2

我增加了一些東西,你CustomArrayAdaptor和測試它,見下圖:

public class CustomArrayAdapter extends ArrayAdapter<String> { 

    int checkAccumulator; 

    public CustomArrayAdapter(Context context, String [] Pairs) { 
     super(context, R.layout.row_layout1, Pairs); 
     checkAccumulator = 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = LayoutInflater.from(getContext()); 
     View customView = inflater.inflate(R.layout.row_layout1, parent, false); 
     String stringelement = getItem(position); 
     TextView Text = (TextView) customView.findViewById(R.id.textelement); 

     CheckBox checkBox1 = (CheckBox) customView.findViewById(R.id.Checkbox1); 
     CheckBox checkBox2 = (CheckBox) customView.findViewById(R.id.Checkbox2); 

     CompoundButton.OnCheckedChangeListener checkListener = new CompoundButton.OnCheckedChangeListener() { 
        @Override 
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
         countCheck(isChecked); 
         Log.i("MAIN", checkAccumulator + ""); 
        } 
       }; 

     checkBox1.setOnCheckedChangeListener(checkListener); 
     checkBox2.setOnCheckedChangeListener(checkListener); 

     Text.setText(stringelement); 
     return customView; 
    } 

    private void countCheck(boolean isChecked) { 

     checkAccumulator += isChecked ? 1 : -1 ; 
    } 
} 
  1. 新增INT checkAccumulator跟蹤已經被點擊了多少物品。
  2. 增加了兩個複選框視圖用於跟蹤檢查。
  3. 新增CompoundButton.OnCheckedChangeListener調用一個新的countCheck方法每次任何複選框被選中/取消。我們通過isChecked布爾值來跟蹤我們是否需要添加或減去我們的checkAccumulator
  4. 添加countCheck功能,增加或減少依賴於布爾值。對不起,代碼混淆了,對於那些不習慣使用?條件它基本上是說如果是true加1,否則加-1。
  5. 不知道你想要做的檢查計數,所以我增加了一個Log.i(「MAIN」,checkAccumulator +「」);只是讓你可以看Android監視器,以確保它實際上工作。

應該爲你工作。

+0

謝謝!將盯着Android工作室的其他明智的日子... –

+0

很高興幫助。還有幾點:確保你的* .xml *文件總是全部小寫。另外,關於** TextView Text **和** View CustomView ** ... ** Text **和** CustomView **應該是小寫。大寫的第一個字母是爲類定義保留的,而不是類實例。即使StackOverflow也會被大寫字母混淆,並將它們像類一樣着色。祝你好運。 – Gi0rgi0s

+0

作爲一個額外的問題,你能告訴我如何將stand1.xml中Score的textview設置爲checkAccumulator? 感謝關於命名,相當新的這一點,所以將嘗試並修復一段時間後 –

2

首先,你應該回收您的意見適配器:

LayoutInflater inflater = LayoutInflater.from(getContext()); 

    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.row_layout1, parent, false); 
    } 

後那我認爲你應該拯救這個國家您的數據源中的每個複選框,或者只保留一個列表,與您的pair數組大小相同,然後使用getView獲得的位置保存它。