web-dev-qa-db-ja.com

リストアイテムのクリックがチェックボックスで機能しないAndroid

編集(解決済み)回答については、質問の下部に移動してください。

リストビューがあり、カスタムアダプタを使用してリストビューのいくつかの行を膨らませています。インフレートされる行にはチェックボックスが含まれています。チェックボックスのステータスを維持できますが、問題は、リストアイテムがクリックできないことです。これが私のコードです:

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;
        }
}

ユーザーが1つのアイテムのみをクリックしたい場合に備えて、リストアイテムをクリック可能にしたい。

EDIT(Akhilの要求による)-レイアウトフォルダー内のpreann2.xml:

<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:

<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>

編集(解決済み)これらのプロパティをチェックボックスに追加するだけです:

  Android:focusable="false"
  Android:focusableInTouchMode="false"
32
silentkratos
17
Heath Borders

リストアイテムのrootViewでこの行を使用します。
Android:descendantFocusability = "blocksDescendants"

5
Suresh kumar

こちらをご覧ください問題を誤解しています。問題が解決されることを願っています。

0
Akhil