ON / OFF Кнопка переключения [с использованием значений таблицы SQLite] в вызове метода getView () Arrayadapter для Listview? - PullRequest
1 голос
/ 14 июля 2020

Проблема: Включение / отключение кнопки переключения при загрузке Listview в отношении значений «Да» и «Нет», хранящихся в таблице для каждой отображаемой строки. Неделю потратил на этот вопрос. SO также не имеет подходящего решения для включения / выключения значений переключателей для строк элементов, отображаемых методом getView (). элементы из (Таблица SQLite) и добавлены в отдельный Arraylist и для всех значений «Да» в нем, пытались включить / отключить переключатель в соответствующей строке Listview [реализация Arrayadapter].


import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;


public class Ecs extends ListActivity {

   public static ArrayList<String> firstList ;
   public static ArrayList<String> swlist ;
   TextView searchtext;
   Con control = new Con(this);

}
public static class Apache extends ArrayAdapter<HashMap<String, String>> {

        public static final String DN = "DN";// 0 text(String)
      
        public static ArrayList<String> noon ;

        public ArrayList<HashMap<String, String>> firstList;
        Activity activity;
 
        public Apache(Activity activity, ArrayList<HashMap<String, String>> firstList) {
            super(activity, R.layout.simple, firstList);
            this.activity = activity;
            this.firstList = firstList;

        }

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

        @Override
        public HashMap<String, String> getItem(int position) {
            return Ecs.firstList.get(position);
        }

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

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

            final HashMap<String, String> map = firstList.get(position);
            final ItemViewHolder viewHolder;
            final int pos = position;

            if (convertView == null) {

                LayoutInflater layoutInflater = (LayoutInflater)
this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

                convertView = layoutInflater.inflate(R.layout.fisrtlay, parent, false);
                viewHolder = new ItemViewHolder();
                
                viewHolder.TDD = (TextView) 
 convertView.findViewById(R.id.txtdnno);             
                viewHolder.SWW = (Switch) convertView.findViewById(R.id.sw);                       
                convertView.setTag(viewHolder);

            } else {

                viewHolder = (ItemViewHolder) convertView.getTag();

            }

            viewHolder.TDD.setText(map.get(DN));          
            viewHolder.SWW.setText(map.get(TYPE));
            viewHolder.SWW.setChecked(false);
            viewHolder.SWW.setTag("SWITCH");


            if (noon.contains(firstList.get(pos).get(ICODE))) {
                viewHolder.SWW.setChecked(true);             
            }

            viewHolder.SWW.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    String title = v.getTag().toString();
                    if (title.equals("SWITCH")) {

                        //if (viewHolder.SWW.getText().toString().trim().equals("Yes"))

                        if (viewHolder.SWW.isChecked()) {
                            noon.add(firstList.get(pos).get(ICODE));

                        } else {
                            if (noon.contains(firstList.get(pos).get(ICODE))) {
                                noon.remove(firstList.get(pos).get(ICODE));
                            }
                        }
                    }
                }
            });

        
            notifyDataSetChanged();           

            return convertView;
        }

 public class ItemViewHolder {

            TextView TDD;
            Switch SWW;
      
        }
    }
}

XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    xmlns:tools="http://schemas.android.com/tools"
    android:descendantFocusability="blocksDescendants"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <LinearLayout
            android:id="@+id/lvh"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#ffe6e6e6"
            android:minHeight="50dp"
            android:orientation="horizontal"
            android:scrollbarSize="5dp"
            android:scrollbars="horizontal"
            android:weightSum="5"
            android:focusable="true">

            <TextView
                android:id="@+id/txtdnno"
                android:layout_width="22dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_weight="1"
                android:gravity="center"
                android:padding="3dp"
                android:text="DNNO"
                android:textColor="#000000"
                android:textSize="12sp" />

            <RadioGroup
                android:layout_width="14dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_weight="1"
                android:gravity="center"
                android:orientation="vertical"
                android:padding="3dp">

                <Switch
                    android:id="@+id/sw"
                    android:layout_width="45dp"
                    android:layout_height="21dp"
                    android:layout_gravity="center"
                    android:focusable="false"
                    android:gravity="center"
                    android:onClick="switchClicked"
                    android:shadowColor="#FFFFFF"
                    android:textOff="@string/no"
                    android:textOn="@string/yes"
                    android:textSize="12sp" />

            </RadioGroup>    
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

Ответы [ 2 ]

0 голосов
/ 15 июля 2020

Проблема:

Вызов метода [Yesvalues], который запрашивает и хранит все значения «Да» в [swlist] из таблицы и добавляет запись будущих значений «Да» при взаимодействии пользователя с показом Listview.

Проверьте позицию строки [pos], получите ICODE строки и перекрестную проверку с помощью [swlist], чтобы включить / выключить кнопку переключения этой строки. Метод getView () будет делать то же самое для каждого элемента строки и его переключателя рядом.

Записывать или удалять «Да» при сохранении, когда пользователь взаимодействует [Switch OnClickListener / Save OnClickListener].

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;


public class Ecs extends ListActivity {

   public static ArrayList<String> firstList ;
   public static ArrayList<String> swlist ;
   TextView searchtext;
   Con control = new Con(this);

private void DNat() {

        if (searchtext.getText().toString().length() > 3) {

            swlist = control.Yesvalues(searchtext.getText().toString());  /// STEP 1
            firstList = control.Sear(searchtext.getText().toString());

            if (myList.size() != 0) {

                lv = getListView();

                adapter = new Apache(Ecs.this, firstList, swlist);
                lv.setAdapter(adapter);

                control.close();

            } 
        }

    }
}


public static class Apache extends ArrayAdapter<HashMap<String, String>> {

        public static final String DN = "DN";// 0 text(String)
      
        public static ArrayList<String> noon ;

        public ArrayList<HashMap<String, String>> firstList;
        Activity activity;
 
        public Apache(Activity activity, ArrayList<HashMap<String, String>> firstList, ArrayList<HashMap<String, String>> swlist){
            super(activity, R.layout.simple, firstList);
            this.activity = activity;
            this.firstList = firstList;
            this.noon = swlist;  

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

        @Override
        public HashMap<String, String> getItem(int position) {
            return Ecs.firstList.get(position);
        }
        
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            final HashMap<String, String> map = myList.get(position);
            final ItemViewHolder viewHolder;
            final int pos = position;
           

            if (convertView == null) {

                LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

                convertView = layoutInflater.inflate(R.layout.simple, parent, false);
                viewHolder = new ItemViewHolder();
                 viewHolder.TDD = (TextView) convertView.findViewById(R.id.txtdnno);             
                viewHolder.SWW = (Switch) convertView.findViewById(R.id.sw);                       
                convertView.setTag(viewHolder);

            } else {

                viewHolder = (ItemViewHolder) convertView.getTag();

            }

 viewHolder.TDD.setText(map.get(DN));          
            viewHolder.SWW.setText(map.get(TYPE));
            viewHolder.SWW.setChecked(false);
            viewHolder.SWW.setTag("SWITCH");


            final HashMap<String, String> tyes = new HashMap<String, String>();  ///STEP 2
            tyes.put(DDN, myList.get(pos).get(DN));
            tyes.put(IICODE, myList.get(pos).get(ICODE));

            if (noon.contains(tyes) {
                viewHolder.SWW.setChecked(true);             
            }

            viewHolder.SWW.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    String title = v.getTag().toString();
                    if (title.equals("SWITCH")) {   /// STEP 3

                     if (viewHolder.SWW.isChecked()) {  

                           noon.add(tyes);

                        } else {
       
                              if (noon.contains(tyes) && viewHolder.SWW.getText().equals("No")) {
                            
                                noon.remove(tyes);
                            }
                        }
                    }
                }
            });

            
            notifyDataSetChanged();           

            return convertView;
        }

 public class ItemViewHolder {

            TextView TDD;
            Switch SWW;     

        }

    }

Чтобы запросить все переключатели, записанные как ДА:

public class Con extends AppCompatActivity {

public Con() {}

public ArrayList<HashMap<String, String>> Yesvalues(String DN) {

        ArrayList<HashMap<String, String>> yeslist;
        String Yes="Yes";
        yeslist = new ArrayList<HashMap<String, String>>();
        int sval=Integer.parseInt(String.valueOf(DN));
        String selectQuery = "SELECT DN, ICODE FROM " + Tablename
                + " WHERE DN =" + sval + " AND STYPE = "  + "'"+ Yes +"'";
        SQLiteDatabase database = dbHelper.getWritableDatabase();
        Cursor cursor = database.rawQuery(selectQuery, null);
        if (cursor.moveToFirst()) {
            do {
                HashMap<String, String> yesmap = new HashMap<String, String>();
                yesmap.put(DNNO, cursor.getString(0));
                yesmap.put(ITEMCODE, cursor.getString(1));
                yeslist.add(yesmap);
            } while (cursor.moveToNext());
        }
        return yeslist;
    }
}
    
0 голосов
/ 14 июля 2020

Если ваши noon и firstList содержат такие данные, как

noon.add("123");
    
firstList.add(new HashMap<>().put(ICODE, "123"));
firstList.add(new HashMap<>().put(ICODE, "321"));
firstList.add(new HashMap<>().put(ICODE, "32"));

, тогда ваш код должен работать, и для первого элемента это будет Yes, для других 2 No.

...