it-swarm.com.de

Listenelementklick funktioniert nicht mit Ankreuzfeldern von Android

BEARBEITEN (Gelöst) Für die Antwort gehen Sie zum Ende der Frage.

Ich habe eine Listenansicht und blase einige Zeilen darin mit einem benutzerdefinierten Adapter auf. Die Zeile, die aufgeblasen wird, enthält ein Kontrollkästchen. Ich kann den Status des Kontrollkästchens beibehalten, aber das Problem ist, dass meine Listenelemente nicht mehr anklickbar sind. Hier ist mein Code:

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

Ich möchte, dass die Listenelemente anklickbar sind, falls der Benutzer nur auf ein einzelnes Element klicken möchte.

EDIT (auf Akhils Anfrage) - Preann2.xml im Ordner layouts:

<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 im Ordner layouts:

<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 (SOLVED) Fügen Sie einfach diese Eigenschaften zum Kontrollkästchen hinzu:

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

Verwenden Sie diese Zeile in der rootView des Listenelements
Android: descendantFocusability = "BlocksDescendants"

5
Suresh kumar

Ich habe Ihr Problem falsch verstanden ..Bitte schauen Sie hierfür Ihr Problem .. hoffe es wird Ihr Problem lösen .. 

0
Akhil