将CheckBox的已检查状态从ListView的行传递到按钮单击上的另一个Activity

时间:2012-11-17 06:35:13

标签: android checkbox android-listview

问题:在我检查了自定义CheckBoxes中显示的多个ListView后,我仍然返回自定义{{1}中显示的整行数据值无论我做出什么选择。在我检查后,我猜ListView的状态从未改变过。那么在我检查多个CheckBox后如何设置CheckBox状态(true)?此外,当我点击提交CheckBoxes时,如何从CheckBoxes获取已检查的ListView位置?然后,如何调用Button的类来检索特定的数据行,包括ModelTextView(供用户输入)以显示在另一个自定义列表中以进行检查{{ 1}}只?

摘要:我想在另一页上显示仅选中复选框的值行数组。

testing1.xml

EditText

testing.xml

CheckBoxes

MultipleSet1.java类:

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

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="match_parent"
        android:layout_height="310dp"
        android:layout_x="0dp"
        android:layout_y="-4dp" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <ListView
                android:id="@android:id/list"
                android:layout_width="match_parent"
                android:layout_height="293dp" >

            </ListView>

        </LinearLayout>
    </ScrollView>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="113dp"
        android:layout_y="346dp"
        android:text="Button" />

</AbsoluteLayout>

InteractiveListViewAdapter.java类:

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

    <CheckBox
        android:id="@+id/checkBox1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="208dp"
        android:layout_y="4dp"
        android:text="CheckBox" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="11dp"
        android:layout_y="15dp"
        android:text="TextView" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="22dp"
        android:layout_y="49dp"
        android:text="TextView" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="42dp"
        android:layout_y="89dp"
        android:text="TextView" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="35dp"
        android:layout_y="123dp"
        android:text="TextView" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="42dp"
        android:layout_height="wrap_content"
        android:layout_x="147dp"
        android:layout_y="13dp"
        android:ems="10"
        android:inputType="number" />

</AbsoluteLayout>

Model.java类:

public class MultipleSet1 extends ListActivity
{


    List<Model> list = new ArrayList<Model>();

     protected void onCreate(Bundle savedInstanceState)
     {
         super.onCreate(savedInstanceState);
         View viewToLoad = LayoutInflater.from(this.getParent()).inflate(R.layout.testing1, null);
            this.setContentView(viewToLoad);
         //final ViewHolder viewHolder = new ViewHolder();
         String temp = "Set_A";
         String response = null;
         ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
         postParameters.add(new BasicNameValuePair("Name", temp));

            try
            {
                response = CustomHttpClient.executeHttpPost("PhPScripts", postParameters);
            }

            catch (Exception e)
            {
                // TODO Auto-generated catch block
                Toast.makeText(getApplicationContext(), "Fail to connect to server7777777777.", 3).show();
            }

            int size = 0;

            try
            {

             JSONArray jArray = new JSONArray(response);
             size = jArray.length();

             for(int i =0; i<size; i++)
             {
                JSONObject json_data = jArray.getJSONObject(i);
                list.add(get(json_data.getString("description"), json_data.getString("price"), false));

             }

            }
            catch (JSONException e)
            {
               Toast.makeText(getApplicationContext(), "Fail to connect to server7777777777.", 3).show();
            }

             ArrayAdapter<Model> adapter = new InteractiveListViewAdapter(this, list);
             setListAdapter(adapter);

             Button button1 = (Button) findViewById(R.id.button1);
             button1.setOnClickListener(new View.OnClickListener() {

                    //@Override
                    public void onClick(View v) {

                        ListView list = (ListView)findViewById(android.R.id.list);
                        list = getListView();
                        list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
                        int size = list.getCount();
                        String checked = "";

                         String unchecked = "";
                         SparseBooleanArray sparseBooleanArray = list.getCheckedItemPositions();

                         for(int i = 0; i < size; i++)
                         {

                             if(sparseBooleanArray.get(i) == true) 
                             {
                                 checked += list.getItemAtPosition(i).toString() + "\n";
                             }
                             else  if(sparseBooleanArray.get(i) == false) 
                             {
                                 unchecked+= list.getItemAtPosition(i).toString() + "\n";
                             }


                         }

                            Intent intent = new Intent(getApplicationContext(), SingleSet.class);
                            intent.putExtra("TAG_DESCRIPTION", unchecked);

                            // Create the view using TabTour's LocalActivityManager
                            View view1 = bookingTab.group.getLocalActivityManager().startActivity("BookingTab", intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                            .getDecorView();

                            // Again, replace the view
                            bookingTab.group.replaceView(view1);

                    }
             });




     }

     private Model get(String name, String score, boolean selected)
     {
         return new Model (name, score, selected);
     }

}

1 个答案:

答案 0 :(得分:0)

您的代码存在很多问题:

  • 不要使用AbsolutLayout,该类已被弃用,因为您无法使用它来制作在Android设备的所有屏幕上都能很好扩展的布局那里有。
  • 不要将可滚动的小部件(如ListView)放在其他可滚动小部件(如ScrollView)中,这样做不会很顺利。
  • 不要在主要线程上做一些可能需要很长时间才能完成的东西,因为你最终会得到一个“不稳定的”#34;应用甚至更糟糕的可怕的ANR对话框。此操作包括任何网络操作,数据库访问等。使用线程或AsyncTasks从Internet获取数据。
  • 我不确定你对ActivityManager做了什么,但我觉得这不是正确的。只需使用Activity的{​​{1}}方法和startActivity
  • Intent使用默认的getCheckedItemPositions和SDK中的一个布局。如果您使用自定义行布局制作自己的适配器,则必须自己管理ArrayAdapter状态(并设置检索该状态的方法)。这部分应该很简单,有成千上万的问题和博客如何做到这一点。
  • 适配器的CheckBox方法不正确。对于getView方法的每次调用,应在两个视图上设置标记(因此应将它们设置在getView块之外)。我也不认为那些听众会很好地工作。
  • 即便如此,您的代码仍无法正常工作,因为您使用所需数据设置了if (convertView == null),但实际上并未使用Intent来启动新的Intent,因此您不会将任何信息传递给新启动的Activity

这应该让你朝着正确的方向前进。