2015-10-18 56 views
0

我有一個ListView中的學生列表,我想跟蹤出席情況(有點類似於How to get checked radio button in list view?Listview with Checkbox,RadioButton,Textview and button not working correctly in android)。如何獲取ListView中每一行的選定單選按鈕

當用戶點擊提交按鈕時,我需要知道每一行RadioGroup的設置,以便將值保存回數據庫(迄今爲止使用SimpleCursorAdapter)。我已經查看SimpleCursorAdapter.getCount()和RadioGroup.getCheckedRadioButtonId()使用for循環遍歷列表,但仍然不知道如何獲取每個列表項的RadioGroup的持有。

listView.getAdapter()。getItem()???

請你指點我正確的方向?當用戶檢查項目或更改按鈕的狀態時,我不會嘗試做任何事情。

在此先感謝。

回答

1

在你的列表視圖中使用viewHolder

Model.java

public class Model { 

    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; 
    } 
} 

MainActivity.java

public class MainActivity extends Activity implements OnItemClickListener{ 

    ListView listView; 
    ArrayAdapter<Model> adapter; 
    List<Model> list = new ArrayList<Model>(); 

    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.main); 

     listView = (ListView) findViewById(R.id.my_list); 
     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; 
    } 
} 

main.xml中

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

<ListView 
android:id="@+id/my_list" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" /> 

</LinearLayout> 

row.xml 

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" > 

<TextView 
android:id="@+id/label" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="@+id/label" 
android:textSize="30sp" > 
</TextView> 

<CheckBox 
android:id="@+id/check" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignParentRight="true" 
android:layout_marginLeft="4dip" 
android:layout_marginRight="10dip" 
android:focusable="false" 
android:focusableInTouchMode="false" > 
</CheckBox> 

</RelativeLayout> 

MyAdapter.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(); // Here we get the position that we have set for the checkbox using setTag. 
        list.get(getPosition).setSelected(buttonView.isChecked()); // Set the value of checkbox to maintain its state. 
       } 
      }); 
      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); // This line is important. 

     viewHolder.text.setText(list.get(position).getName()); 
     viewHolder.checkbox.setChecked(list.get(position).isSelected()); 

     return convertView; 
    } 
} 
-1

我也曾經面臨同樣的問題,現在什麼都要你需要做

  • 只使用getChildCount()ListView
  • 從(i = 0高達childoflist)
  • 使用循環現在通過使用view=listview.getChildAt(i)
  • 讓孩子在第i個位置的列表視圖現在你必須做一些像 radiogroup=view.findViewById(R.id.radiogrp)
  • 現在你把所有的東西則u必須做radioButton = (RadioButton) rgg.findViewById(selectedId);

我在這裏附上我的代碼是除了學生名單AKHIL賈古瑪代碼

///ok is your upload button 

ok.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     final int child=listView.getChildCount(); 
      for(int i=0;i<child;i++) { 
      View rgg=listView.getChildAt(i); 

    radioGroup = (RadioGroup) rgg.findViewById(R.id.radio); 

    int selectedId=radioGroup.getCheckedRadioButtonId(); 

    radioButton = (RadioButton) rgg.findViewById(selectedId); 

    } 
} 
}); 
+0

將嘗試它作爲儘快找到時間。感謝您回覆我。 – andr

1
ok.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
    final int child=listView.getChildCount(); 
     for(int i=0;i<child;i++) { 
     if(listView.childAt(i) instanceof RadioGroup){ 
     RadioGroup rg=(RadioGroup)listView.childAt(i); 
     int a = rg.getChildCount(); 
     for(int j=0;j<a;++j) { 
      if((RadioButton)rg.getChildAt(j).isChecked()==true) { 
      System.out.println("RadioButton At "+j+" Is Selected");} 
      } 
     } 
    } 
} 
}); 
+0

只要我找到時間,我會盡快嘗試。感謝您回覆我。 – andr

相關問題