gpt4 book ai didi

当我们滚动列表时,自定义 ListView 中的 Android 单选按钮会更改其状态

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:37:45 26 4
gpt4 key购买 nike

我是初学者,遇到一个问题,我正在创建一个包含两个 RadioButton 和一个 TextViewListView。一切顺利,但是当我设置 RadioButton 并滚动它时,先前 RadioButton 的值会改变它们的值或显着失去它们的状态。我一直在努力解决这个问题。我应该做哪些改变来克服这个问题?

主 Activity .java

public class MainActivity extends Activity {

private ListView listView1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Option weather_data[] = new Option[]
{
new Option("Heading1"),
new Option("Heading12"),
new Option("Heading3"),
new Option("Heading4"),
new Option("Heading5"),
new Option("Heading6"),
new Option("Heading7"),
new Option("Heading8"),
new Option("Heading9"),
new Option("Heading10")
};
RadioGroupAdapter adapter = new RadioGroupAdapter(this,
R.layout.listitem, weather_data);
listView1 = (ListView)findViewById(R.id.list);
listView1.setAdapter(adapter);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}

选项.java

public class Option {
public String title;
public Option(){
super();
}

public Option( String title) {
super();
this.title = title;
}
}

RadioGroupAdapter.java

public class RadioGroupAdapter extends ArrayAdapter<Option> {

Context context;
int layoutResourceId;
Option data[] = null;

public RadioGroupAdapter(Context context, int layoutResourceId,
Option[] data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
MatrixHolder holder = null;

if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);

holder = new MatrixHolder();
holder.txtTitle = (TextView) row.findViewById(R.id.heading);
holder.group = (RadioGroup) row.findViewById(R.id.radio_group1);
final RadioButton[] rb = new RadioButton[2];
for(int i=0; i<2; i++){
rb[i] = new RadioButton(context);
//rb[i].setButtonDrawable(R.drawable.single_radio_chice);
rb[i].setId(i);
RadioGroup.LayoutParams params = new RadioGroup.LayoutParams(
0, LayoutParams.WRAP_CONTENT);
params.weight=1.0f;
params.setMargins(5, 0, 5, 10);
holder.group.addView(rb[i],params); //the RadioButtons are added to the radioGroup instead of the layout
}
row.setTag(holder);
} else {
holder = (MatrixHolder) row.getTag();
}

Option option = data[position];
holder.txtTitle.setText(option.title);
return row;
}

static class MatrixHolder {
TextView txtTitle;
RadioGroup group;
int position;
}
}

列表项.xml

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

<TextView
android:id="@+id/heading"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:padding="10dp"
android:textSize="18sp"
android:textStyle="bold"
android:layout_weight="50" />

<RadioGroup
android:id="@+id/radio_group1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal"
android:orientation="horizontal"
android:layout_weight="50" >
</RadioGroup>

</LinearLayout>

最佳答案

您需要为每个项目保存 RadioButton 的状态,因此在滚动时在 getView() 方法中,它首先会检查每个 RadioButton 的状态。

第 1 步:- 您需要创建一个 Pojo 类(Setter 和 Getter)来保存 RadioButton 的状态。

有关更多详细信息,请访问以下链接

http://amitandroid.blogspot.in/2013/03/android-listview-with-checkbox-and.html

这个例子是一个带有 CheckBox 的 ListView,你需要根据你的要求把它改成 RadioButton。

关于当我们滚动列表时,自定义 ListView 中的 Android 单选按钮会更改其状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18842599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com