Listview与Checkbox,RadioButton,Textview和按钮在android中无法正常工作

Listview与Checkbox,RadioButton,Textview和按钮在android中无法正常工作,第1张

概述我正在创建一个 Android应用程序,我的应用程序的UI在下面给出. 单击提交按钮,我需要选中复选框和单选按钮值. 未检查示例Linux,检查cc(单选按钮). 记录在列表视图中动态填充,但我无法使其正常工作.许多 有问题. >当我滚动列表视图时,单选按钮会自动选中或取消选择,无法维持单选按钮的状态. >单击按钮不获取所选单选按钮以及复选框. 下面是我的布局以及java程序.建议我得到正确的值. 我正在创建一个 Android应用程序,我的应用程序的UI在下面给出.

单击提交按钮,我需要选中复选框和单选按钮值.

未检查示例linux,检查cc(单选按钮).

记录在列表视图中动态填充,但我无法使其正常工作.许多
有问题.

>当我滚动列表视图时,单选按钮会自动选中或取消选择,无法维持单选按钮的状态.
>单击按钮不获取所选单选按钮以及复选框.

下面是我的布局以及java程序.建议我得到正确的值.

main.xml中

<ListVIEw    androID:ID="@+ID/my_List"    androID:layout_wIDth="fill_parent"    androID:layout_height="199dp" /><button    androID:ID="@+ID/submit"    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:text="submit"    />

row.xml

<TextVIEw    androID:ID="@+ID/label"    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:text="@+ID/label"    androID:layout_toRightOf="@+ID/check"    androID:textSize="20sp" ></TextVIEw><CheckBox    androID:ID="@+ID/check"    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:layout_alignParentleft="true"    androID:layout_marginleft="4dip"    androID:layout_marginRight="10dip"    androID:focusable="false"    androID:focusableIntouchMode="false" ></CheckBox> <RadioGroup     androID:ID="@+ID/radioSex"     androID:layout_wIDth="wrap_content"     androID:layout_height="fill_parent"     androID:layout_alignParentRight="true"     androID:layout_alignParenttop="true"     androID:orIEntation="horizontal" >     <Radiobutton         androID:ID="@+ID/to"         androID:layout_wIDth="wrap_content"         androID:layout_height="wrap_content"         androID:layout_marginleft="10dip"         androID:checked="true"         androID:text="To" />     <Radiobutton         androID:ID="@+ID/cc"         androID:layout_wIDth="wrap_content"         androID:layout_height="wrap_content"         androID:layout_marginleft="10dip"         androID:text="CC" /> </RadioGroup>

MyAdaptor.java

public class MyAdapter extends ArrayAdapter<Model> {    private final List<Model> List;    private final Activity context;    boolean checkAll_flag = false;    boolean checkItem_flag = false;    public MyAdapter(Activity context,List<Model> List) {        super(context,R.layout.row,List);        this.context = context;        this.List = List;    }    static class VIEwHolder {        protected TextVIEw text;        protected CheckBox checkBox;    }    @OverrIDe    public VIEw getVIEw(int position,VIEw convertVIEw,VIEwGroup parent) {        VIEwHolder vIEwHolder = null;        if (convertVIEw == null) {            LayoutInflater inflator = context.getLayoutInflater();            convertVIEw = inflator.inflate(R.layout.row,null);            vIEwHolder = new VIEwHolder();            vIEwHolder.text = (TextVIEw) convertVIEw.findVIEwByID(R.ID.label);            vIEwHolder.checkBox = (CheckBox) convertVIEw                    .findVIEwByID(R.ID.check);            vIEwHolder.checkBox                    .setonCheckedchangelistener(new Compoundbutton.OnCheckedchangelistener() {                        @OverrIDe                        public voID onCheckedChanged(Compoundbutton buttonVIEw,boolean isChecked) {                            int getposition = (Integer) buttonVIEw.getTag();                            List.get(getposition).setSelected(                                    buttonVIEw.isChecked());                        }                    });            convertVIEw.setTag(vIEwHolder);            convertVIEw.setTag(R.ID.label,vIEwHolder.text);            convertVIEw.setTag(R.ID.check,vIEwHolder.checkBox);        } else {            vIEwHolder = (VIEwHolder) convertVIEw.getTag();        }        vIEwHolder.checkBox.setTag(position);        vIEwHolder.text.setText(List.get(position).getname());        vIEwHolder.checkBox.setChecked(List.get(position).isSelected());        return convertVIEw;    }

MainActivity.java

public class MainActivity extends Activity implements OnItemClickListener {    ListVIEw ListVIEw;    ArrayAdapter<Model> adapter;    List<Model> List = new ArrayList<Model>();    private RadioGroup radioCcToGroup;    private Radiobutton radioTypebutton;    private button btn;    public voID onCreate(Bundle icicle) {        super.onCreate(icicle);        setContentVIEw(R.layout.main);        ListVIEw = (ListVIEw) findVIEwByID(R.ID.my_List);        btn = (button) findVIEwByID(R.ID.submit);        btn.setonClickListener(new VIEw.OnClickListener() {            int count = 0;            @OverrIDe            public voID onClick(VIEw vIEw) {                count = ListVIEw.getAdapter().getCount();                for (int i = 0; i < count; i++) {                    // here i am not able to get the records as getting on onItemClick of the ListvIEw                }            }        });        adapter = new MyAdapter(this,getModel());        ListVIEw.setAdapter(adapter);        ListVIEw.setonItemClickListener(this);    }    @OverrIDe    public voID onItemClick(AdapterVIEw<?> arg0,VIEw v,int position,long arg3) {        TextVIEw label = (TextVIEw) v.getTag(R.ID.label);        CheckBox checkBox = (CheckBox) v.getTag(R.ID.check);        Toast.makeText(v.getContext(),label.getText().toString() + " " + isCheckedOrNot(checkBox),Toast.LENGTH_LONG).show();    }    private String isCheckedOrNot(CheckBox checkBox) {        if (checkBox.isChecked())            return "is checked";        else            return "is not checked";    }    private List<Model> getModel() {        List.add(new Model("linux"));        List.add(new Model("windows7"));        List.add(new Model("Suse"));        List.add(new Model("Eclipse"));        List.add(new Model("Ubuntu"));        List.add(new Model("Solaris"));        List.add(new Model("AndroID"));        List.add(new Model("iPhone"));        List.add(new Model("Java"));        List.add(new Model(".Net"));        List.add(new Model("PHP"));        return List;    }

Model.java

private String name;    private boolean selected;    public Model(String name) {        this.name = name;    }    public String getname() {        return name;    }    public boolean isSelected() {        return selected;    }    public voID setSelected(boolean selected) {        this.selected = selected;    }
解决方法 你在MyAdaptor.java上有两个错误:

>当您附加onCheckedchangelistener时,只有在需要创建新视图并且忘记列表视图重用视图的情况时才执行此 *** 作.你应该在setonCheckedchangelistener之外if(convertVIEw == null).
>看来onCheckedchangelistener也在滚动完成时被调用(因为vIEwHolder.checkBox.setChecked(List.get(position).isSelected());).您可以通过在VIEwHolder.checkBox上使用OnClickListener或不调用vIEwHolder.checkBox.setChecked()来避免这种情况.

这是我的代码:

private class VIEwHolder {    protected TextVIEw text;    protected CheckBox checkBox;    protected RadioGroup radioGroup;}public class MyAdapter extends ArrayAdapter<Model> {    private final List<Model> List;    private final Activity context;    boolean checkAll_flag = false;    boolean checkItem_flag = false;    public MyAdapter(Activity context,List);        this.context = context;        this.List = List;    }    @OverrIDe    public VIEw getVIEw(int position,null);            vIEwHolder = new VIEwHolder();            vIEwHolder.text = (TextVIEw) convertVIEw.findVIEwByID(R.ID.label);            vIEwHolder.checkBox = (CheckBox) convertVIEw.findVIEwByID(R.ID.check);            vIEwHolder.checkBox.setTag(position);            vIEwHolder.radioGroup = (RadioGroup) convertVIEw.findVIEwByID(R.ID.radioSex);            vIEwHolder.radioGroup.setTag(position);            convertVIEw.setTag(vIEwHolder);        } else {            vIEwHolder = (VIEwHolder) convertVIEw.getTag();        }        vIEwHolder.text.setText(List.get(position).getname());        vIEwHolder.checkBox.setChecked(List.get(position).isSelected());        vIEwHolder.checkBox.setonClickListener(new OnClickListener() {            @OverrIDe            public voID onClick(VIEw v) {                CheckBox checkBox = (CheckBox) v;                int getposition = (Integer) checkBox.getTag();                List.get(getposition).setSelected(checkBox.isChecked());            }        });        vIEwHolder.radioGroup.setonCheckedchangelistener(new OnCheckedchangelistener() {            @OverrIDe            public voID onCheckedChanged(RadioGroup group,int checkedID) {                boolean isCcOrIsTo = (checkedID == R.ID.cc);                int getposition = (Integer) group.getTag();                List.get(getposition).setCcOrIsTo(isCcOrIsTo);            }        });        return convertVIEw;    }}

注意我也添加了对radiogroup的一些控制,因此Model.java已经改变:

public class Model {    private String name;    private boolean selected;    private boolean isCcOrIsTo;    public Model(String name) {        this.name = name;    }    public String getname() {        return name;    }    public boolean isSelected() {        return selected;    }    public voID setSelected(boolean selected) {        this.selected = selected;    }    public boolean isCcOrIsTo() {        return isCcOrIsTo;    }    public voID setCcOrIsTo(boolean isCcOrIsTo) {        this.isCcOrIsTo = isCcOrIsTo;    }    @OverrIDe    public String toString() {        String selectedString = selected ? "selected" : "not selected";        String value = isCcOrIsTo ? "CC" : "To";        return name+" -> "+selectedString+ " with value "+value;    }}

最后,您不需要在MainActivity.java上使用onItemClick,以便在单击峰值按钮时检查值是否正确:

public voID onCreate(Bundle icicle) {    super.onCreate(icicle);    setContentVIEw(R.layout.activity_main);    ListVIEw = (ListVIEw) findVIEwByID(R.ID.my_List);    btn = (button) findVIEwByID(R.ID.submit);    btn.setonClickListener(new VIEw.OnClickListener() {        @OverrIDe        public voID onClick(VIEw vIEw) {            for (Model m : List) {                Log.i("Stack1",m.toString());            }        }    });    ArrayAdapter<Model> adapter = new MyAdapter(this,getModel());    ListVIEw.setAdapter(adapter);}

希望能帮助到你 总结

以上是内存溢出为你收集整理的Listview与Checkbox,RadioButton,Textview和按钮在android中无法正常工作全部内容,希望文章能够帮你解决Listview与Checkbox,RadioButton,Textview和按钮在android中无法正常工作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1118364.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存