Флажок покрытия касания в настраиваемом просмотре списка - PullRequest
1 голос
/ 02 января 2012

Привет всем, у меня есть проблема.

Я сделал тест для обучения созданию простого пользовательского списка с чекбоксами, и я делаю этот код:

XML CODEROW

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


<TextView
    android:id="@+id/maggiore"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:text="Large Text"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<TextView
    android:id="@+id/minore"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/maggiore"
    android:text="Small Text"
    android:textAppearance="?android:attr/textAppearanceSmall" />


<CheckBox
    android:id="@+id/checkBox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:focusable="false"
    android:text="" />

 </RelativeLayout>

JAVA CODE

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.custommain);

    final ListView listview = (ListView) findViewById(R.id.listView);

    final ArrayList<String> nomiList=new ArrayList<String>();

    SQLiteDatabase myDb = openOrCreateDatabase("listaspesa_database",0,null);

    Cursor c = myDb.rawQuery("SELECT * FROM liste ORDER BY id ", null);
    int nomeListaId = c.getColumnIndex("nome_lista");
    while(c.moveToNext()){
          String nomeLista = c.getString(nomeListaId);
          nomiList.add(nomeLista);
    }

    final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.row_main, R.id.maggiore, nomiList) {


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

            View adapterView = super.getView(position, convertView, parent);

            String item = nomiList.get(position);

            TextView textItem = (TextView)adapterView.findViewById(R.id.minore);

            checkBox = (CheckBox)adapterView.findViewWithTag(R.id.checkBox);

            SQLiteDatabase myDb = openOrCreateDatabase("listaspesa_database",0,null);

            Cursor c = myDb.rawQuery("SELECT * FROM liste WHERE nome_lista='"+item+"' ", null);             

            int nomeListaId = c.getColumnIndex("luogo_lista");
            while(c.moveToNext()){
                  String nomeLista = c.getString(nomeListaId);
                  textItem.setText(nomeLista);
            }

            listview.setOnItemClickListener(new OnItemClickListener(){

                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {

                    checkBox.toggle();


                }

            });


            return adapterView;
        }



    };

    listview.setAdapter(arrayAdapter);




    listview.setOnItemLongClickListener(new OnItemLongClickListener(){

        @Override
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long id) {

            String daEliminare = nomiList.get((int) id);
            arrayAdapter.remove(daEliminare);
            return false;
        }

    });
     }
 }

Но когда я нажимаю на список, последнийфлажок, а не ответчик.

Почему ??Спасибо (извините за английский, но я не англичанин и мне только 15:))

1 Ответ

1 голос
/ 02 января 2012

В этой функции:

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {

                checkBox.toggle();


            }

должно быть:

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {
                CheckBox currentCheckBox = (CheckBox)arg0.findViewWithTag(R.id.checkBox);
                currentCheckBox.toggle();
            }

checkbox ссылался на старое значение из getView

Вы хотите получить текущий флажок из представления, которое было щелкнуто в обработчике событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...