Pertanyaan Listitem klik tidak berfungsi dengan kotak centang Android


EDIT (ASK) Untuk jawabannya, pergilah ke bagian bawah pertanyaan.

Saya memiliki listview dan saya mengembang beberapa baris di dalamnya menggunakan customadapter. Baris yang digelembungkan mengandung kotak centang. Saya dapat mempertahankan status kotak centang, tetapi masalahnya adalah, daftar item saya tidak lagi dapat diklik. Ini kode saya:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    fl=(ListView)findViewById(R.id.MainMenu);//Mainmenu is listview
    fl.setAdapter(new CustomAdapter(Annotate.this,R.layout.preann2,_dir));//preann2 is row and _dir is the list of objects
    //fl.setOnItemClickListener(this); tried this too
}

public void onItemClick(AdapterView<?> a, View view, int pos, long id) 
{
      //Implementations
}

    public class CustomAdapter extends ArrayAdapter<String>
{
    public CustomAdapter(Context context, int textViewResourceId,String[] objects) {
        super(context, textViewResourceId,objects);
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater=getLayoutInflater();
            View row=inflater.inflate(R.layout.preann2, parent, false);
            try
            {

            TextView Name=(TextView)row.findViewById(R.id.title);
            Name.setText("xyz");
            ImageView icon=(ImageView)row.findViewById(R.id.icon);
            row.setFocusable(true);
            row.setClickable(true);
            row.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    checkState[position]=!checkState[position];
                }

            });
            CheckBox c=(CheckBox)row.findViewById(R.id.checkBox);
            c.setChecked(checkState[position]);
            c.setOnCheckedChangeListener(new OnCheckedChangeListener(){

                @Override
                public void onCheckedChanged(CompoundButton v,
                        boolean isChecked) {
                    // TODO Auto-generated method stub
                    CheckBox checkBox=(CheckBox)v;
                    if (isChecked) {
                        checkState[position]=true;
                     }
                    else
                        checkState[position]=false;
                }
            });
            /*  tried this too
                                  c.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View v) {
                    CheckBox checkBox=(CheckBox)v;
                    if (checkBox.isChecked()) {
                        //checkBox.setChecked(false);
                        checkState[position]=true;
                     }
                    else
                        checkState[position]=false;
                }});*/
            icon.setImageResource(R.drawable.ic_launcher);
            }catch(Throwable err)
            {
                err.printStackTrace();
            }
            return row;
        }
}

Saya ingin listitems dapat diklik jika pengguna hanya ingin mengklik satu item.

EDIT (atas permintaan Akhil) - preann2.xml di folder tata letak:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal"
  android:padding="4dip"
  >

 <ImageView android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_marginRight="4dip"/>


  <TextView
  android:id="@+id/title"
  android:layout_width="fill_parent"
  android:layout_height="match_parent"
  android:layout_weight="1"
  android:ellipsize="end"
  android:gravity="center_vertical"
  android:singleLine="true"
  android:textStyle="bold" />

<CheckBox
  android:id="@+id/checkBox"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" />

</LinearLayout>

main.xml di folder tata letak:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >


<ListView
    android:id="@+id/MainMenu"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

</ListView>

</LinearLayout>

EDIT (ASK) Cukup tambahkan properti ini ke kotak centang:

  android:focusable="false"
  android:focusableInTouchMode="false"

32
2018-04-07 05:16


asal


Jawaban:


Solusi yang disebutkan dalam pertanyaan memecahkan masalah:

android:focusable="false"
android:focusableInTouchMode="false"

AbsListView pemeriksaan View#hasFocusable dan tidak akan mengizinkan penekanan pada item jika demikian. Jadi, nonaktifkan fokus pada semua item yang biasanya dapat difokuskan.


17
2018-04-12 04:20



Gunakan baris ini di rootView dari daftar item
android: descendantFocusability = "blocksDescendants"


5
2018-05-28 18:33



Saya salah memahami masalah Anda ..silakan lihat di sini untuk masalah Anda .. semoga itu akan menyelesaikan masalah Anda ..


0
2018-04-07 05:26