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

先生,我做了一些更改,还将自定义适配器包含到列表视图中,并且还更改为 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;

    }

}

}

4

1 回答 1

0

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

于 2014-05-21T16:16:01.780 回答