以前选择的单选按钮不起作用
Previously selected radio button not working
我正在使用 json 解析,在单击按钮时我有一个带有 listview 和 Radio Button 的警告对话框。列表是动态生成的。默认情况下,列表的第一个单选按钮是 selected,现在问题是如果我 select 第二项并关闭对话框,当我打开它时再次显示第一个单选按钮 selected 而不是第二 。以下是我的代码,有人能帮忙吗?
适配器
public class CustomListAdapterSize extends BaseAdapter {
private Context context;
private LayoutInflater inflater;
private List<ProdSizes> movieItems;
private List<ProductPackModel> packItems;
private RadioButton selected =null;
private int mSelectedPosition = 0;
private RadioButton mSelectedRB;
public CustomListAdapterSize(Context context,List<ProdSizes> movieItems) {
this.context = context;
this.movieItems=movieItems;
}
@Override
public int getCount() {
return movieItems.size();
}
@Override
public Object getItem(int position) {
return movieItems.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(com.vetsupply.au.project.R.layout.listitem_productsizes, null);
holder.txtproname = (TextView) convertView.findViewById(com.vetsupply.au.project.R.id.txtproductsizenames);
holder.txtproprice = (TextView) convertView.findViewById(com.vetsupply.au.project.R.id.txtproductsizeprice);
holder.radioBtn = (RadioButton)convertView.findViewById(com.vetsupply.au.project.R.id.productsize_radio);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
// getting movie data for the row
final ProdSizes m = movieItems.get(position);
// title
holder.txtproname.setText(m.getProViews_Size());
holder.txtproprice.setText("$"+m.getProViews_MinPrice());
if (position == getCount() - 1) {
if (selected == null) {
holder.radioBtn.setChecked(true);
selected = holder.radioBtn;
/*for(int i=0;i<movieItems.size();i++)
{
sizenms = movieItems.get(i).getProViews_Size();
}
*/
}
}
holder.radioBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (selected != null) {
selected.setChecked(false);
}
holder.radioBtn.setChecked(true);
selected = holder.radioBtn;
ids = m.getProViews_ID();
sizenms = m.getProViews_Size();
System.out.println(">>>>>>>>>>>>>" + ids);
System.out.println("<<<<<<<<<<<" + sizenms);
dialogf.dismiss();
}
});
return convertView;
}
class ViewHolder{
TextView txtproname,txtproprice;
public RadioButton radioBtn;
}
}
请试试这个。我认为您没有将位置存储到 mSelectedPosition
private int mSelectedPosition = 0;//declare it publically not locally into your adapter
if (position == mSelectedPosition ) {
if (selected == null) {
holder.radioBtn.setChecked(true);
selected = holder.radioBtn;
/*for(int i=0;i<movieItems.size();i++)
{
sizenms = movieItems.get(i).getProViews_Size();
}
*/
}
}
holder.radioBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (selected != null) {
selected.setChecked(false);
}
mSelectedPosition =position;
holder.radioBtn.setChecked(true);
selected = holder.radioBtn;
ids = m.getProViews_ID();
sizenms = m.getProViews_Size();
System.out.println(">>>>>>>>>>>>>" + ids);
System.out.println("<<<<<<<<<<<" + sizenms);
dialogf.dismiss();
}
});
请使用选择模式并将位置存储在本地[共享首选项]或使用API存储
public class MainActivity extends AppCompatActivity {
ListView mListView;
ArrayList<String> mArrayList;
ArrayAdapter mArrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.listView_id);
mArrayList = new ArrayList();
mArrayList.add("ONE");
mArrayList.add("TWO");
mArrayList.add("THREE");
mArrayAdapter = new ArrayAdapter(getApplicationContext(),
android.R.layout.simple_list_item_single_choice,
mArrayList);
mListView.setAdapter(mArrayAdapter);
/***Save your position **/
int position = 1;//Save your position in Shared preferences or get it from API
mListView.setItemChecked(position, true);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CheckedTextView textView = (CheckedTextView) view;
for (int i = 0; i < mListView.getCount(); i++) {
if (textView != null) {
textView.setTextColor(Color.GREEN);
}
}
mListView.invalidate();
textView = (CheckedTextView) view;
if (textView != null) {
textView.setTextColor(Color.BLUE);
}
}
});
}
}
如果有帮助,请告诉我。
这样试试....
int mSelectedPosition = -1;
public class CustomListAdapterSize extends BaseAdapter{
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Your Code
holder.checks.setChecked(position==mSelectedPosition );
holder.checks.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked)
{
mSelectedPosition = position;
}
else{
mSelectedPosition = -1;
}
notifyDataSetChanged();
}
});
return convertView;
}
}
我正在使用 json 解析,在单击按钮时我有一个带有 listview 和 Radio Button 的警告对话框。列表是动态生成的。默认情况下,列表的第一个单选按钮是 selected,现在问题是如果我 select 第二项并关闭对话框,当我打开它时再次显示第一个单选按钮 selected 而不是第二 。以下是我的代码,有人能帮忙吗?
适配器
public class CustomListAdapterSize extends BaseAdapter {
private Context context;
private LayoutInflater inflater;
private List<ProdSizes> movieItems;
private List<ProductPackModel> packItems;
private RadioButton selected =null;
private int mSelectedPosition = 0;
private RadioButton mSelectedRB;
public CustomListAdapterSize(Context context,List<ProdSizes> movieItems) {
this.context = context;
this.movieItems=movieItems;
}
@Override
public int getCount() {
return movieItems.size();
}
@Override
public Object getItem(int position) {
return movieItems.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(com.vetsupply.au.project.R.layout.listitem_productsizes, null);
holder.txtproname = (TextView) convertView.findViewById(com.vetsupply.au.project.R.id.txtproductsizenames);
holder.txtproprice = (TextView) convertView.findViewById(com.vetsupply.au.project.R.id.txtproductsizeprice);
holder.radioBtn = (RadioButton)convertView.findViewById(com.vetsupply.au.project.R.id.productsize_radio);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
// getting movie data for the row
final ProdSizes m = movieItems.get(position);
// title
holder.txtproname.setText(m.getProViews_Size());
holder.txtproprice.setText("$"+m.getProViews_MinPrice());
if (position == getCount() - 1) {
if (selected == null) {
holder.radioBtn.setChecked(true);
selected = holder.radioBtn;
/*for(int i=0;i<movieItems.size();i++)
{
sizenms = movieItems.get(i).getProViews_Size();
}
*/
}
}
holder.radioBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (selected != null) {
selected.setChecked(false);
}
holder.radioBtn.setChecked(true);
selected = holder.radioBtn;
ids = m.getProViews_ID();
sizenms = m.getProViews_Size();
System.out.println(">>>>>>>>>>>>>" + ids);
System.out.println("<<<<<<<<<<<" + sizenms);
dialogf.dismiss();
}
});
return convertView;
}
class ViewHolder{
TextView txtproname,txtproprice;
public RadioButton radioBtn;
}
}
请试试这个。我认为您没有将位置存储到 mSelectedPosition
private int mSelectedPosition = 0;//declare it publically not locally into your adapter
if (position == mSelectedPosition ) {
if (selected == null) {
holder.radioBtn.setChecked(true);
selected = holder.radioBtn;
/*for(int i=0;i<movieItems.size();i++)
{
sizenms = movieItems.get(i).getProViews_Size();
}
*/
}
}
holder.radioBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (selected != null) {
selected.setChecked(false);
}
mSelectedPosition =position;
holder.radioBtn.setChecked(true);
selected = holder.radioBtn;
ids = m.getProViews_ID();
sizenms = m.getProViews_Size();
System.out.println(">>>>>>>>>>>>>" + ids);
System.out.println("<<<<<<<<<<<" + sizenms);
dialogf.dismiss();
}
});
请使用选择模式并将位置存储在本地[共享首选项]或使用API存储
public class MainActivity extends AppCompatActivity {
ListView mListView;
ArrayList<String> mArrayList;
ArrayAdapter mArrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.listView_id);
mArrayList = new ArrayList();
mArrayList.add("ONE");
mArrayList.add("TWO");
mArrayList.add("THREE");
mArrayAdapter = new ArrayAdapter(getApplicationContext(),
android.R.layout.simple_list_item_single_choice,
mArrayList);
mListView.setAdapter(mArrayAdapter);
/***Save your position **/
int position = 1;//Save your position in Shared preferences or get it from API
mListView.setItemChecked(position, true);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CheckedTextView textView = (CheckedTextView) view;
for (int i = 0; i < mListView.getCount(); i++) {
if (textView != null) {
textView.setTextColor(Color.GREEN);
}
}
mListView.invalidate();
textView = (CheckedTextView) view;
if (textView != null) {
textView.setTextColor(Color.BLUE);
}
}
});
}
}
如果有帮助,请告诉我。
这样试试....
int mSelectedPosition = -1;
public class CustomListAdapterSize extends BaseAdapter{
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Your Code
holder.checks.setChecked(position==mSelectedPosition );
holder.checks.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked)
{
mSelectedPosition = position;
}
else{
mSelectedPosition = -1;
}
notifyDataSetChanged();
}
});
return convertView;
}
}