Динамически генерируемая радио-кнопка меняет свое положение при прокрутке
483 просмотра
1 ответ
Я динамически создал радио-кнопки. И они отображаются довольно хорошо, но когда я выбираю и прокручиваю, он теряет свою позицию. Я знаю способ установки и получения тега с помощью класса ViewHolder и преобразования представления. но на этот раз у меня есть динамические идентификаторы, поэтому я не могу пометить идентификатор. я пытался так
converview.setTag(rdbtn.getId(),rdbtn);
Но это бросает The key must be an application specific Resource id
.
Вот мой класс адаптера
static class FeedBacksubmitionViewHolder {
protected TextView Question;
protected EditText Cooment;
protected ViewGroup Radiogroup;
protected TextView Q;
}
public View getView(int position,View converview,ViewGroup parent) {
FeedBacksubmitionViewHolder viewHolder = null;
if (converview ==null ){
LayoutInflater inflater=context.getLayoutInflater();
converview=inflater.inflate(R.layout.listfeedbacksubmitionquestion, null,true);
viewHolder = new FeedBacksubmitionViewHolder();
viewHolder.Question = (TextView) converview.findViewById(R.id.tvFeedbacksubmitionquestion);
viewHolder.Cooment = (EditText) converview.findViewById(R.id.edfeedbacksubmitioncomment);
viewHolder.Radiogroup=((ViewGroup)converview. findViewById(R.id.radiogroup));
viewHolder.Q =(TextView)converview.findViewById(R.id.feedba1);
LinearLayout ll = new LinearLayout(context);
ll.setOrientation(LinearLayout.VERTICAL);
int number = feedBackSubmitionOptionList.size();
//if(position!=feedBackSubmitionQuestionList.size()-1 || )
for (int i = 0; i < number; i++) {
//if(ll.getChildAt(0).getId()!=feedBackSubmitionOptionList.get(i).getId()){
RadioButton rdbtn = new RadioButton(context);
rdbtn.setId(feedBackSubmitionOptionList.get(i).getId());
rdbtn.setText(feedBackSubmitionOptionList.get(i).getOptionLabel());
ll.addView(rdbtn);
converview.setTag(rdbtn.getId(),rdbtn);
//}
}
converview.setTag(viewHolder);
converview.setTag(R.id.tvFeedbacksubmitionquestion,viewHolder.Question);
converview.setTag(R.id.edfeedbacksubmitioncomment,viewHolder.Cooment);
converview.setTag(R.id.radiogroup,viewHolder.Radiogroup);
converview.setTag(R.id.feedba1,viewHolder.Q);
viewHolder.Radiogroup.addView(ll);
}else{
viewHolder= (FeedBacksubmitionViewHolder)converview.getTag();
}
Автор: shivpal jodha
Источник
Размещён: 12.11.2019 09:40
Ответы (1)
1 плюс
В последние дни я боролся с этой проблемой, но работа над R & N позволила решить проблему. Вы можете сделать что-то вроде этого.
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub// if(position==0)//Toast.makeText(context, ""+QuestionViewPageAdapter.mRadioGroupData, Toast.LENGTH_SHORT).show();
final ViewHolder viewHolder;
View row=convertView;
radioButton=new RadioButton[Integer.parseInt(mNoOfCategoryGreading)]; LayoutInflater inflater =LayoutInflater.from(context);//(LayoutInflater)context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.question_row, parent, false);
viewHolder=new ViewHolder();
viewHolder.tv_qContent=(TextView)row.findViewById(R.id.tv_question);
viewHolder.rg=(RadioGroup)row.findViewById(R.id.rgrp);
for(int i=0;i<Integer.parseInt(mNoOfCategoryGreading);i++)
{
radioButton[i]=new RadioButton(context);
radioButton[i].setLayoutParams(new RadioGroup.LayoutParams(0, LayoutParams.WRAP_CONTENT,1f));
//1f for layout_weight="1"
radioButton[i].setId(i);
radioButton[i].setText(""+(i+1));
viewHolder.rg.addView(radioButton[i]);
}
row.setTag(viewHolder);
for(int i=0;i<QuestionViewPageAdapter.mRadioGroupData.size();i++){
int p=Integer.parseInt(""+QuestionViewPageAdapter.mRadioGroupData.get(i).get("position"));
String id=QuestionViewPageAdapter.mRadioGroupData.get(i).get("Id");
if(p!=-1 && id.equals(""+data.get(position).get(AppData.question_Set_category_QuestionID)))
{//radioButton[p].setSelected(true);
viewHolder.rg.check(p-1);}//Toast.makeText(context, "Yes "+p, Toast.LENGTH_LONG).show();}viewHolder.tv_qContent.setText((position+1)+". "+data.get(position).get(AppData.question_Set_category_QuestionContent));
viewHolder.tv_qContent.setTypeface(typeface_muso_regular300);
viewHolder.rg.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// TODO Auto-generated method stub
String s=data.get(position).get(AppData.question_Set_category_QuestionID);
isAvailabel(s);
int radioButtonID = viewHolder.rg.getCheckedRadioButtonId();
View radioButton = viewHolder.rg.findViewById(radioButtonID);
int idx = viewHolder.rg.indexOfChild(radioButton);
HashMap<String, String> map=new HashMap<String, String>();
map.put("position", ""+(idx+1));
map.put("Id", ""+data.get(position).get(AppData.question_Set_category_QuestionID));
map.put("CategoryId", ""+mCategoryId);
QuestionViewPageAdapter.mRadioGroupData.add(map);
}
});
return row;
}
private void isAvailabel(String qId){
for(int i=0;i<QuestionViewPageAdapter.mRadioGroupData.size();i++){
if(qId.equals(QuestionViewPageAdapter.mRadioGroupData.get(i).get("Id"))){
position=i;
QuestionViewPageAdapter.mRadioGroupData.remove(i);
}
}
}
class ViewHolder {
TextView tv_qContent ,tv_1,tv_2,tv_3;
RadioGroup rg;
RadioButton rBtn1,rBtn2,rBtn3,rBtn4,rBtn5;
}
Я не мог удалить код, который не так важен для вас. Вы должны изучить код, и я думаю, что вы поймете идею. Upvote, если я решу вашу проблему.
Автор: Devendra Singh Размещён: 08.06.2015 06:14Вопросы из категории :
- android Насколько хорошо отражает эмулятор Android Phone?
- android Как сохранить состояние активности Android с помощью сохранения состояния экземпляра?
- android Android: доступ к дочерним представлениям из ListView
- android Как вызвать SOAP веб-сервис на Android
- listview Как я могу получить доступ к ListViewItems WPF ListView?
- listview Прокрутите список в WPF в определенную строку
- listview c # мерцание Listview при обновлении
- listview Добавление кнопки в ListView в WinForms
- android-listview Как обновить список рассылки Android?
- android-listview Как изменить цвет разделительной линии Android ListView?
- android-listview Как я могу поместить ListView в ScrollView без его разрушения?
- radio-button Как я могу определить SelectedValue RadioButtonList в JavaScript?
- radio-button Как узнать, какой переключатель выбран с помощью jQuery?
- radio-button В jQuery, как выбрать элемент по его атрибуту name?
- radio-button Использование «метки для» на переключателях
- dynamically-generated Автоматически генерировать вложенное оглавление на основе тегов заголовка
- dynamically-generated Очистка состояния динамически созданных элементов управления для добавления новых элементов управления
- dynamically-generated Событие jQuery .on () не работает для динамически добавляемого элемента
- dynamically-generated JQuery: выбор динамически создаваемых элементов и отправка в Firebase