2015-11-26 4 views
0

У меня есть настраиваемый адаптер массива, который обрабатывает представление списка. Каждая строка имеет два флажка. Всего пять рядов. Я хочу, чтобы иметь возможность подсчитать количество флажков галочки, а затем отобразить этот номер в Stand1Как подсчитать количество отмеченных галочек, которое находится внутри списка.

Поэтому в основном макет проекта, как этот

Внутри stand1 есть вид списка и вид текста. Стенд1.java вызывает адаптер массива Called CustomArrayAdaptor. Я хочу иметь возможность подсчитать количество щелчков и отправить эти данные на стенд1

Я довольно новичок в разработке 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; 
    } 




} 

Благодарности Folks

+1

Вам нужно будет отслеживать состояние проверки в вашем пользовательском адаптере. Подобно http://stackoverflow.com/a/28408710/995891 - тогда просто посчитайте 'true' в 'checkboxState'. – 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. Добавлено 2 CheckBox Виды для отслеживания чеков.
  3. Добавлено CompoundButton.OnCheckedChangeListener, что вызывает новый countCheck метод каждый раз, когда какой-либо флажок/снят. Мы передаем isChecked boolean для отслеживания, нужно ли нам добавлять или вычитать из нашего checkAccumulator.
  4. Added countCheck Функция, которая добавляет или вычитает в зависимости от булева. Извините за запутанный код, для всех тех, кто не привык к? условно это в основном говорит если true добавить 1, иначе добавить -1.
  5. Не уверен, что вы хотели сделать с проверкой, поэтому я добавил Log.i («MAIN», checkAccumulator + «»);, так что вы можете посмотреть Android Monitor, чтобы убедиться, что он действительно работает.

Должно работать для вас.

+0

СПАСИБО !!! Было бы смотреть на андроид-студию в течение нескольких дней ... –

+0

Рад помочь. Еще пару моментов: убедитесь, что ваши * .xml * файлы всегда все в нижнем регистре. Кроме того, в отношении ** TextView Text ** и ** View CustomView ** ... ** Текст ** и ** CustomView ** должны быть строчными. Первые буквы первого порядка зарезервированы для определений классов, а не для экземпляров классов. Даже StackOverflow путается за счет капитализации и окрашивает их как классы. Удачи тебе. – Gi0rgi0s

+0

В качестве бонусного вопроса вы могли бы рассказать мне, как я могу установить текстовое представление показателя в stand1.xml для проверкиAccumulator? Благодарим за именование, совершенно новичок в этом, поэтому попытаемся исправить это через некоторое время –

2

Прежде всего, вы должны переработать свои взгляды в адаптере:

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

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

После что, я думаю, вы должны сохранить состояние каждого флажка в вашем источнике данных или просто сохранить список, тот же размер вашего парного массива и сохранить его там, используя позицию, которую вы получаете от getView.

Смежные вопросы