3

I know that there are a lot of posts about checkboxes within Listviews and I can honestly say that after reading a large majority of these, it has left me confused with a hurting brain.

My code does not extend the ListViewActivity but does have a listview as part of a relative layout which sits within a tabhost.

I have tried the focusable=false both against the textview and the checkbox, the textview behaves but the checkbox still overrides the focus of the listview item.

If I only needed one textview then I would have gone for androids built in layout but I require at least 6 textviews with a checkox on each line.

My Main.xml is this :

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/tabhost_master"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent">
  <TabWidget 
    android:id="@android:id/tabs"
    android:layout_width="fill_parent"
    android:layout_height="65px"
     />  

<FrameLayout
   android:id="@android:id/tabcontent"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:paddingTop="65px">
<RelativeLayout
    android:id="@+id/tab1"
    android:orientation="vertical"
    android:layout_height="fill_parent"
    android:weightSum="1" android:gravity="top" android:layout_width="fill_parent">
    <TextView android:text="Morning Set Up" android:textAppearance="?android:attr/textAppearanceMedium" android:id="@+id/textView1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true"></TextView>
    <Button android:text="Set Time On" android:layout_height="wrap_content" android:id="@+id/startb" android:layout_width="wrap_content" android:layout_below="@+id/textView1" android:layout_alignParentLeft="true"></Button>
    <Button android:text="Set Time Off" android:layout_height="wrap_content" android:id="@+id/stopb" android:layout_width="wrap_content" android:layout_alignTop="@+id/startb" android:layout_alignParentRight="true"></Button>
    <Button android:layout_width="wrap_content" android:text="Set Days" android:id="@+id/mset_days" android:layout_height="wrap_content" android:layout_below="@+id/startb" android:layout_centerHorizontal="true"></Button>
    <Button android:id="@+id/confirm_m" android:layout_height="wrap_content" android:text="Confirm" android:layout_width="wrap_content" android:layout_alignTop="@+id/mset_days" android:layout_alignParentLeft="true"></Button>
    <Button android:id="@+id/cancel_m" android:layout_height="wrap_content" android:text="Cancel" android:layout_width="wrap_content" android:layout_alignTop="@+id/mset_days" android:layout_alignParentRight="true"></Button>
    <ListView android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/listView1" android:layout_below="@+id/mset_days" android:layout_alignParentLeft="true" android:layout_marginTop="34dp"></ListView>
</RelativeLayout>
<RelativeLayout
    android:id="@+id/tab2"
    android:orientation="vertical"
    android:layout_height="fill_parent"
    android:weightSum="1" android:gravity="top" android:layout_width="fill_parent">
    <TextView android:text="A Set Up" android:textAppearance="?android:attr/textAppearanceMedium" android:id="@+id/textView1_a" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true"></TextView>
    <Button android:text="Set Time On" android:layout_height="wrap_content" android:id="@+id/startb_a" android:layout_width="wrap_content" android:layout_below="@+id/textView1_a" android:layout_alignParentLeft="true"></Button>
    <Button android:text="Set Time Off" android:layout_height="wrap_content" android:id="@+id/stopb_a" android:layout_width="wrap_content" android:layout_alignTop="@+id/startb_a" android:layout_alignParentRight="true"></Button>
    <Button android:layout_width="wrap_content" android:text="Set Days" android:id="@+id/mset_days_a" android:layout_height="wrap_content" android:layout_below="@+id/startb_a" android:layout_centerHorizontal="true"></Button>
    <TextView android:layout_height="wrap_content" android:text="Date / Time : \n Day \n Time" android:id="@+id/dandt_a" android:layout_width="wrap_content" android:layout_below="@+id/mset_days_a" android:layout_alignRight="@+id/mset_days_a" android:layout_marginTop="30dp"></TextView>
    <TextView android:id="@+id/dandt2_a" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Along with this one as well" android:layout_below="@+id/dandt_a" android:layout_alignParentLeft="true" android:layout_marginLeft="14dp" android:layout_marginTop="44dp"></TextView>
    <TextView android:layout_height="wrap_content" android:text="To see if these text boxes clash" android:id="@+id/dandt3_a" android:layout_width="wrap_content" android:layout_centerVertical="true" android:layout_alignParentLeft="true"></TextView>
    <Button android:id="@+id/confirm_after_a" android:layout_height="wrap_content" android:text="Confirm" android:layout_width="wrap_content" android:layout_alignTop="@+id/mset_days_a" android:layout_alignParentLeft="true"></Button>
    <Button android:id="@+id/cancel_after_a" android:layout_height="wrap_content" android:text="Cancel" android:layout_width="wrap_content" android:layout_alignTop="@+id/mset_days_a" android:layout_alignParentRight="true"></Button>

</RelativeLayout>


</FrameLayout>
</TabHost>

My layout for the listview is this :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
    <CheckBox android:text="Cancel ?" android:focusable="false"  android:checked="false" android:layout_width="wrap_content" android:id="@+id/checkBox1" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentLeft="true"></CheckBox>
    <TextView android:layout_width="wrap_content" android:focusable="false" android:id="@+id/time_disp" android:layout_height="wrap_content" android:text="TextView" android:layout_alignParentTop="true" android:layout_toRightOf="@+id/checkBox1" android:layout_marginLeft="16dp" android:layout_marginTop="15dp"></TextView>
    <CheckedTextView android:layout_width="wrap_content" android:focusable="false"  android:layout_height="wrap_content" android:text="CheckedTextView" android:id="@+id/checkedTextView1" android:layout_alignTop="@+id/time_disp" android:layout_alignParentRight="true" android:layout_marginRight="18dp"></CheckedTextView>

</RelativeLayout>

My activity code is this :

package co.uk.sheildsatmax.layout_tester;



import android.app.Activity;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
import android.widget.Toast;
import android.widget.CheckBox;
public class Layout_testerActivity extends Activity  {
    /** Called when the activity is first created. */
    private String[] times = {"09:10","10:10","11:20","09:10","12:20","15:30","10:12"};
    ListView lv;
    CheckBox ticked;
    @Override

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

        TabHost tabhost=(TabHost)findViewById(R.id.tabhost_master);
        tabhost.setup();

        TabSpec tab1 = tabhost.newTabSpec("Tab1");
        morning_tab.setContent(R.id.tab1);
        morning_tab.setIndicator("Tab1 Setup");

        TabSpec tab2 = tabhost.newTabSpec("tab2");
        after_tab.setContent(R.id.tab2);
        after_tab.setIndicator("Tab2 Setup");

        tabhost.addTab(tab1b);
        tabhost.addTab(tab2);
        lv = (ListView)findViewById(R.id.listView1);
       // ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,R.layout.,R.id.time_disp,times);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.list_lay,R.id.time_disp,times);
        lv.setItemsCanFocus(false);        // this was another test attempt
        lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); // tried this and then realised it needed androids own layout to work

        lv.setAdapter(adapter);       

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
                Toast.makeText(getApplication().getApplicationContext(), "ID :"+Long.toString(arg3), Toast.LENGTH_LONG).show();


            }
        });




    }


}

Now I have been reading about creating a separate class for the adapter to make the checkbox work correctly, but is this required and if so could someone please post a basic example for me to use as all of these links I have read have really confused me:

As you can see I have read quite a few, but they have puzzled me even more and none seem to have examples without listactivies. I am writing this in android 1.6

4
  • I am going to re-attempt the examples from the anddev.org links and try and use these. Not sure though if they will work as I a not using extend ListActivity within my project as the Activity is also managing a tabhost as well. Commented Jan 27, 2012 at 12:16
  • I think I have found a better example of what I am after here anddev.org/other-coding-problems-f5/… so I will try this and see how I get on Commented Jan 27, 2012 at 13:41
  • tried the code from the above link, still have the issue where the checkbox takes over the focus of the listview. hmmm more thought needed here Commented Jan 28, 2012 at 23:34
  • think I understand now that the checkbox will always interact when clicked on but the list view line it sits on will still work. I have now managed to get the checkbox to be ticked when the list view line is clicked on as well. Furthermore I have learnt about the recycle habits of the listview. Commented Jan 29, 2012 at 20:41

1 Answer 1

0

Fixed this issue now , partly my misunderstanding on how the checkbox works with the listview and also understanding the behavior of the listview as well.

I ended up using the example given on this thread at this forum -> managing multiple checkboxes

With the help of this thread on this forum => [Ticking checkboxes when clicking a listview line][2]

Finally got the listview to remember which checkbox is tick when scrolling up and down off the screen using => Keeping the checkbox state on listview recycle

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.