当listview在android中向下滚动时,togglebutton状态会发生变化吗?

时间:2014-05-21 16:12:51

标签: android-listview android-arrayadapter android-adapterview android-togglebutton

i have placed a textview and a toggle button into a list view by using the following xml file and i have used an arrayadapter to set it on to my layout, my problem is when i scroll down in the list view by unchecking a few toggle buttons (which are all set to be checked by default), they go back to default state and few others change state. As i want to fetch the state of the toggle button in my later stages its very important to stick on to the state that ive assigned to the toggle button. Please help to resolve this problem. Here are my xml file and the java code i use to set it on to the adapter. thank you in prior...


xml file that is named listdecor is included here 


    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/lvlistdecor"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#000000"
        android:orientation="horizontal"
        android:weightSum="2" >

        <TextView
            android:id="@+id/tvlistdecor"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1.5"
            android:ellipsize="marquee"
            android:singleLine="true"
            android:text="sample"
            android:textColor="#FFFFFF"
            android:textSize="24sp"
            android:typeface="sans" />

        <CheckBox
            android:id="@+id/cbusn_checked"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_marginRight="6sp"
            android:layout_weight="0.5"
            android:checked="true"
            android:focusable="false"
            android:padding="10dp" />

    </LinearLayout>

Sir我做了一些更改,并且还将自定义适配器包含在列表视图中,并且还更改为CheckBox而不是切换按钮。但现在我的模拟器上看不到整个列表视图。我已经包含了我编辑的java类和xml文件,请建议我更改,谢谢... 修改后的java代码包含在这里

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE); // Setting the window to full screen Step 1
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN); // Setting the window to full screen Step 2

    setContentView(R.layout.attendance5);


    facid = (TextView) findViewById(R.id.tvfacid);
    facname = (TextView) findViewById(R.id.tvfacname);
    subjectchosen = (TextView) findViewById(R.id.tvsubject);
//  llattendlist = (LinearLayout)findViewById(R.id.llattendlist);


    String Uid = getIntent().getStringExtra("Uid");
    facid.setText(Uid);

    String Name = getIntent().getStringExtra("Name");
    facname.setText(Name);


    String Sub = getIntent().getStringExtra("Sub");
    subjectchosen.setText(Sub);



    Attendusn = getIntent().getExtras();
    if(Attendusn!=null)
    {
        AttendStud_usn = (ArrayList<String>)Attendusn.getStringArrayList("AttendStud_usn");
    }
    String AttendLen = String.valueOf(AttendStud_usn.size());
    //int flag = 0 ;
    //subjectchosen.setText(String.valueOf(AttendStud_usn));

    myListView = (ListView) findViewById(R.id.lvnames);
     // myListView.setAdapter(new ArrayAdapter<String>(this, R.layout.listdecoration,R.id.tvlistdecor, AttendStud_usn));
    //ArrayAdapter<String> MyAdapter= new ArrayAdapter<String>(this,R.layout.listdecoration, R.id.tvlistdecor,AttendStud_usn);
    //myListView.setAdapter(MyAdapter);
    myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View item, int position,
                long id) {
            // TODO Auto-generated method stub
            Stud_usn usn= MyAdapter.getItem(position);
            usn.toggleChecked();
            Stud_usnViewHolder vh_usn= (Stud_usnViewHolder) item.getTag();
            vh_usn.getCheckBox().setChecked(usn.isChecked());
        }
    });

    MyAdapter = new Stud_Adapter(this,AttendStud_usn);
    myListView.setAdapter(MyAdapter);

}
private static class Stud_usn{
    private String usn_no="";
    private boolean checked=true;
    public Stud_usn(String usn_no){
        this.usn_no = usn_no;
    }
    public String getUsn(){
        return usn_no;
    }
    public void setChecked(boolean checked){
        this.checked=checked;
    }
    public Object isChecked() {
        // TODO Auto-generated method stub
        return checked;
    }
    public String toString(){
        return usn_no;
    }
    public void toggleChecked() {
        // TODO Auto-generated method stub
        checked = !checked;
    }
}
private static class Stud_usnViewHolder{
    private CheckBox checkbox;
    private TextView textview;

    public Stud_usnViewHolder(TextView textview, CheckBox checkbox){
        this.checkbox=checkbox;
        this.textview=textview;
    }
    public CheckBox getCheckBox() {
        // TODO Auto-generated method stub
        return checkbox;

    }
    public TextView getTextView(){
        return textview;
    }
}

private static class Stud_Adapter extends ArrayAdapter<Stud_usn>{

    public LayoutInflater inflater;
    public Stud_Adapter(Context context, List<String> attendStud_usn) {
        super(context,R.layout.listdecoration,R.id.tvlistdecor);
        // TODO Auto-generated constructor stub
        inflater = LayoutInflater.from(context);
    }

    public View getView(int position, View convertView, ViewGroup parent){

        Stud_usn usn = (Stud_usn) this.getItem(position);

        CheckBox checkbox;
        TextView textview;

        if(convertView  == null){
            convertView = inflater.inflate(R.layout.listdecoration,null);
            textview = (TextView) convertView.findViewById(R.id.tvlistdecor);
            checkbox = (CheckBox) convertView.findViewById(R.id.cbusn_checked);


        }

        return convertView;

    }

}

}

1 个答案:

答案 0 :(得分:0)

视图对象被回收。你必须单独存储这些信息。不在视图中,而是在适配器中使用的数据中。生成视图时,使用此信息再次设置按钮状态。 您必须实现自定义适配器。使用BaseAdapter类。