2016-03-04 6 views
1

Я создал собственный список с двумя радиообъектами в радиогруппе.radobutton не выбран при выборе радиообъектива в списке

Мой код геттер и сеттер файл

Item_radio.java

package com.example.customlistview_radio; 

public class Item_radio 
{ 
    public boolean isSelected_radio1; 
    public boolean isSelected_radio2; 

    public Item_radio(boolean radio1_status,boolean radio2_status) 
    { 
     this.isSelected_radio1=radio1_status; 
     this.isSelected_radio2=radio2_status; 
    } 

    public boolean isSelected_radio1() { 
     return isSelected_radio1; 
    } 
    public void setSelected_radio1(boolean isSelected_radio1) { 
     this.isSelected_radio1 = isSelected_radio1; 
    } 
    public boolean isSelected_radio2() { 
     return isSelected_radio2; 
    } 
    public void setSelected_radio2(boolean isSelected_radio2) { 
     this.isSelected_radio2 = isSelected_radio2; 
    } 
} 

MyRadioAdapter.java

package com.example.customlistview_radio; 

import java.util.ArrayList; 
import java.util.List; 

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Color; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.RadioButton; 

public class MyRadioAdapter extends BaseAdapter 
{ 
    Context context; 
    List<Item_radio> radioList; 
    public MyRadioAdapter(Context context,List<Item_radio> radiolist) 
    { 
     this.context=context; 
     this.radioList=new ArrayList<Item_radio>(); 
     this.radioList.addAll(radiolist); 
    } 

    @Override 
    public int getCount() { 
     return radioList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return radioList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    public static class ViewHolder 
    { 
     RadioButton radio_button1; 
     RadioButton radio_button2; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     final ViewHolder holder; 
     View view = convertView; 

     if(view==null) 
     { 
      LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
      view = inflater.inflate(R.layout.list_item, parent, false); 
      holder = new ViewHolder(); 

      holder.radio_button1=(RadioButton)view.findViewById(R.id.my_radio_but1); 
      holder.radio_button2=(RadioButton)view.findViewById(R.id.my_radio_but2); 

      view.setTag(holder); 
     } 
     else 
     { 
      holder = (ViewHolder) view.getTag(); 
     } 

     if (position % 2 == 1) 
     { 
      view.setBackgroundColor(Color.CYAN); 
     } 
     else 
     { 
      view.setBackgroundColor(Color.WHITE); 
     } 

     final Item_radio radio = (Item_radio) getItem(position); 
     holder.radio_button1.setChecked(radio.isSelected_radio1()); 
     holder.radio_button2.setChecked(radio.isSelected_radio2()); 

     holder.radio_button1.setOnClickListener(new OnClickListener() 
     { 

      @Override 
      public void onClick(View v) 
      { 

       Log.e("button1","Clicked:button1"); 
       RadioButton rb=(RadioButton)v; 
       radio.setSelected_radio1(rb.isChecked()); 
       Log.e("button1","Clicked:button1:"+rb.isChecked()); 
      } 
     }); 
     holder.radio_button2.setOnClickListener(new OnClickListener() 
     { 

      @Override 
      public void onClick(View v) 
      {  
       RadioButton rb=(RadioButton)v; 
       Log.e("button2","Clicked:button2"+rb.isChecked()); 
       radio.setSelected_radio2(rb.isChecked()); 
      } 
     }); 
     return view; 
    } 

} 

MainActivity.java

package com.example.customlistview_radio; 


import java.util.ArrayList; 
import java.util.List; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.Button; 
import android.widget.ListView; 

public class MainActivity extends Activity 

{ 

    ListView mylist; 
    Button submit_but; 

    ArrayList<Item_radio> radio_list; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mylist=(ListView)findViewById(R.id.mylist_demo); 
     submit_but=(Button)findViewById(R.id.submit_but); 


     radio_list=new ArrayList<Item_radio>(); 

     for(int i=0;i<20;i++) 
     { 
      radio_list.add(new Item_radio(false,false)); 
     } 

     mylist.setAdapter(new MyRadioAdapter(MainActivity.this, radio_list)); 
    } 
} 

list_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/RelativeLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <RadioGroup 
     android:id="@+id/my_radio_group" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     > 

     <RadioButton 
      android:id="@+id/my_radio_but1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="radio1" /> 

     <RadioButton 
      android:id="@+id/my_radio_but2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="radio2" /> 
    </RadioGroup> 

</RelativeLayout> 

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="com.example.customlistview_radio.MainActivity" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/hello_world" 
     /> 

    <ListView 
     android:id="@+id/mylist_demo" 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent" 
     android:choiceMode="singleChoice" 
     tools:listitem="@layout/list_item" 
     android:layout_weight="0.3" > 
    </ListView> 

    <Button 
     android:id="@+id/submit_but" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="submit" 
     android:layout_weight="1.5"/> 

</LinearLayout> 

При выборе радиокнопку в списке строки выбран некоторые RadioButton.

Если я просматриваю список и выбираю переключатель между последними 5 или 6 элементами, он не будет выбран.

Проблема

То есть предположим, что радио button1 не выбран, то я выбираю radiobutton2 он получает выбран после radiobutton1 выбран.

Мой LogCat

03-04 10:22:17.221: E/button2(4665): Clicked:button2true 
03-04 10:22:20.201: E/button2(4665): Clicked:button2true 
03-04 10:22:21.221: E/button2(4665): Clicked:button2true 
03-04 10:22:22.101: E/button2(4665): Clicked:button2true 
03-04 10:22:23.711: E/button2(4665): Clicked:button2true 
03-04 10:22:24.671: E/button2(4665): Clicked:button2true 
03-04 10:22:25.711: E/button2(4665): Clicked:button2true 
03-04 10:22:40.770: E/button2(4665): Clicked:button2true 
03-04 10:22:42.371: E/button2(4665): Clicked:button2false 
03-04 10:22:52.271: E/button2(4665): Clicked:button2false 

Пожалуйста, смотрите мой нахо первые 8 строк работает нормально. Когда я нажимаю radobutton2 в 9-й строке, вы не выбираете выбранный статус проверки печати false, но я выбираю кнопку, а также проверенный внешний вид не изменяется в невыбранном режиме.

Я делаю что-то неправильно? Пожалуйста, помогите мне решить проблему. Спасибо ...

ответ

0

Один работает где-то и же не после, это все из-за вас использовали setChecked до того остальные коды. так что я могу предложить вам только удалить эти строки

holder.radio_button1.setChecked(radio.isSelected_radio1()); 
    holder.radio_button2.setChecked(radio.isSelected_radio2()); 

UPDATE: Если это вредит список, а затем выполните следующие действия

Просто реверс логику здесь, После установки radio_1 проверил, установите радио_2 непроверено. Ваш код выглядит следующим образом

holder.radio_button1.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      Log.e("button1", "Clicked:button1"); 
      RadioButton rb = (RadioButton) v; 

      radio.setSelected_radio1(rb.isChecked()); 
      radio.setSelected_radio2(!rb.isSelected()); 
      Log.e("button1", "Clicked:button1:" + rb.isChecked()); 
     } 
    }); 
    holder.radio_button2.setOnClickListener(new View.OnClickListener() 
    { 

     @Override 
     public void onClick(View v) 
     { 
      RadioButton rb=(RadioButton)v; 
      Log.e("button2","Clicked:button2"+rb.isChecked()); 
      radio.setSelected_radio2(rb.isChecked()); 
      radio.setSelected_radio1(!rb.isSelected()); 
     } 
    }); 

UPDATE 2

Что бы в настоящее время происходит это все из-за ваш взгляд перерабатывается, Окончательный вариант вы можете использовать, удалите этот if(view==null) состояние и соответствие else пункт с его кода.

+0

Спасибо за ваш ответ @Shree Krishna. Я пробую ваше предложение. Если мне это нравится, когда я просматриваю список, автоматически выбираются радиокнопки в списке. – Asha

+0

@ Аша Я обновил свой ответ, посмотри. Оставьте комментарий, если возникла ошибка. В настоящее время я нахожусь в отпуске на завтра. Я поймаю это через один день. Извините за это. Но я думаю, что окончательный вариант поможет решить вашу проблему, ваш код в порядке. –

+0

Спасибо @Shree Кришна. Наконец, радиобудильник во всех рядах выбирается, когда ** я удаляю условие if и else **. Но теперь я столкнулся с проблемой прокрутки. я попытаюсь исправить эту проблему прокрутки. Спасибо ... – Asha

0

Необходимо немного изменить свой код.

Шаг 1:

Создать HashMap в адаптере, как этот

HashMap<Integer,Integer> selectedItems = new HashMap<Integer, Integer>(); 

Шаг 2: А внутри GetView добавить следующий

if (selectedItems.get(position) != null) { 
       holder.radio_button1.setChecked(radio.isSelected_radio1()); selectedItems.get(position)); 
      } 

Шаг 3: Внутри вашей радиокнопка onlick добавить следующие

selectedItems.put(position, your_value); 

Примечание:

Здесь your_value равно 0 или 1.Если 1 означает, что радиокнопка выбрана 0, значит не выбрано.

Попробуйте, пожалуйста, дайте мне знать, если у вас возникнут какие-либо проблемы.

Я добавляю это только для переключателя 1. Сначала попробуйте это. Если он работает, то изменить ваше радио-кнопка 2

Edit 1:

Почему бы вам не попробовать с RadioGroup как следующий ?????

rg.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(RadioGroup group, int checkedId) { 
Log.d("chk", "id" + checkedId); 



      } 

     }); 
+0

Спасибо за ваш ответ. Но проблема все же возникает. Поймите мою проблему, когда радиообъект не выбирается, когда я выбираю либо радиобаллон1, либо радиатор 2 – Asha

+0

Реальная проблема - всякий раз, когда вы просматриваете свой список, получая рециркуляцию. Именно по этой причине. Поэтому вам нужно сохранить каждую выбранную строку. Надеюсь, вы понимаете – Amsheer

+0

Я понял, что просмотр, получающий рециркуляцию, является основной проблемой. Согласно вашему предложению, если я хочу сохранить выбранное значение строки, сначала выбирается радиообъект. Моя проблема заключается в том, что кнопка не выбирается, пока я проверяю радиокассету. – Asha