从ListView Android中的单选按钮获取标记

从ListView Android中的单选按钮获取标记,android,android-listview,android-arrayadapter,android-radiogroup,Android,Android Listview,Android Arrayadapter,Android Radiogroup,我有一个自定义的列表视图是用阵列适配器构建的。在列表视图中每个项目包含一个文本视图和一个放射组(带有4个单选按钮)。我可以为每个列表项选择一个单选按钮。在列表视图的底部,我有一个带有按钮的页脚。我想要的是在我点击按钮时获取所有数据,如下所示: 名称1-1 姓名2-3 姓名3-2 姓名4-3 第一列-文本视图中的文本 第二列-所选单选按钮的标签 带视图的活动: public class MarksAdd extends ListActivity { ArrayList<Strin

我有一个自定义的列表视图是用阵列适配器构建的。在列表视图中每个项目包含一个文本视图和一个放射组(带有4个单选按钮)。我可以为每个列表项选择一个单选按钮。在列表视图的底部,我有一个带有按钮的页脚。我想要的是在我点击按钮时获取所有数据,如下所示:

名称1-1

姓名2-3

姓名3-2

姓名4-3

第一列-文本视图中的文本

第二列-所选单选按钮的标签

带视图的活动:

public class MarksAdd  extends ListActivity {
    ArrayList<String> itemlist = new ArrayList<String>();
    private Context context = null;
    private ListView listView;
    private Button BtnDone;
    @Override
    public void onCreate(Bundle saveInstanceState) {
        super.onCreate(saveInstanceState);
        setContentView(R.layout.marks_add);


        Intent intent = getIntent();
        int day = intent.getIntExtra("day", 0);
        int month = intent.getIntExtra("month", 0);
        int year = intent.getIntExtra("year", 0);


        String dayStr = String.valueOf(day);
        String monthStr = String.valueOf(month);
        String yearStr = String.valueOf(year);


        if (day != 0) {
            if(dayStr.length()==1){
                dayStr = "0"+dayStr;
            }
            if(monthStr.length()==1){
                monthStr = "0"+monthStr;
            }
            yearStr = yearStr.substring(2);
            String date = dayStr+"."+monthStr+"."+yearStr;
            Toast.makeText(this, date, Toast.LENGTH_SHORT).show();
        }


        final ArrayAdapter<Model> adapter = new InteractiveArrayAdapter(this,
                getModel());





        listView = getListView();
        LayoutInflater inflater = getLayoutInflater();
        listView.addFooterView(inflater.inflate(R.layout.list_footer, null), null, false);

        setListAdapter(adapter);

        BtnDone = (Button) findViewById(R.id.markListBtn);
        BtnDone.setOnClickListener( new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                //get Values ?????

            }



        });


    }

    private List<Model> getModel() {

        List<Model> list = new ArrayList<Model>();

        dbHelper sql = new dbHelper(this);
        SQLiteDatabase db = sql.getWritableDatabase();
        Cursor cursor = db.query(
                PreferenceManager.getDefaultSharedPreferences(getBaseContext()).getString("group", ""), new String[]{
                        "Id", "Name"},
                null, // The columns for the WHERE clause
                null, // The values for the WHERE clause
                null, // don't group the rows
                null, // don't filter by row groups
                "Name ASC" // The sort order
        );

        while (cursor.moveToNext()) {
            // GET COLUMN INDICES + VALUES OF THOSE COLUMNS
            int id = cursor.getInt(cursor.getColumnIndex("Id"));
            String name = cursor.getString(cursor
                    .getColumnIndex("Name"));
            list.add(get(name));

        }
        cursor.close();





        // Initially select one of the items


        return list;
    }

    private Model get(String question) {
        return new Model(question);
    }



}
我是根据一些变化来做这件事的。事实上,我是开发方面的新手,所以我请求你帮助我。对不起,如果我的问题不对,我的英语不是很好


我们非常感谢您的帮助。

第一个想法是在
列表视图上迭代,并在每一行中获得选中按钮。这实际上不起作用,因为ListView并不总是包含它的所有子项

相反,您应该在用户实际进行选择时存储选中的项。然后,当您按下按钮时,您已经存储了所有数据,并且不必在
列表视图上迭代。此外,如果您向上滚动列表,以这种方式保存当前选择将非常有用,因为您可以在
getView()
中为以前的项目设置当前选中的单选按钮

假设行布局中包含以下内容:

<RadioGroup android:id="@+id/radio_group" ... >
    <RadioButton android:id="@+id/radio_button_1" ... />
    <RadioButton android:id="@+id/radio_button_2" ... />
    <RadioButton android:id="@+id/radio_button_3" ... />
    <RadioButton android:id="@+id/radio_button_4" ... />
</RadioGroup>

现在,您只需从适配器获取型号列表。

当您说数据时,是指日期吗?“你想对这些数据做什么?”巴塞尔塞罗不,我是说数据。textView和radioGroup中的值。我想以后把它们存储在数据库中。问题是我不知道如何在循环中获取所有需要的值并将其放入数组或其他什么东西中。我不知道你的解决方案和我到目前为止得到的代码之间有什么区别,除了我应该在onCheckedChanged中存储数据,而不是在单击按钮时获取数据。我这样做是为了检查在onCheckedChanged期间可以得到什么:Toast.makeText(getContext(),list.get(pos.question+“”+list.get(pos.current,Toast.LENGTH_SHORT).show();它只是显示了一些randow结果。你有一个模型对象列表,你把它传递给了适配器的构造函数,所以我假设你已经有了一些数据(至少是问题)。您还可以如何在listview中显示该问题?
public class Model {
    String question; // hold the question
    int current = NONE; // hold the answer picked by the user, initial is NONE(see below)
    public static final int NONE = 1000; // No answer selected
    public static final int ANSWER_ONE_SELECTED = 0; // first answer selected
    public static final int ANSWER_TWO_SELECTED = 1; // second answer selected
    public static final int ANSWER_THREE_SELECTED = 2; // third answer selected
    public static final int ANSWER_FOUR_SELECTED = 3; // forth answer selected

    public Model(String question) {
        this.question = question;
    }
}
<RadioGroup android:id="@+id/radio_group" ... >
    <RadioButton android:id="@+id/radio_button_1" ... />
    <RadioButton android:id="@+id/radio_button_2" ... />
    <RadioButton android:id="@+id/radio_button_3" ... />
    <RadioButton android:id="@+id/radio_button_4" ... />
</RadioGroup>
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ...
    Model model = getItem(position);
    int checkedId = ... //figure out checked id from model
    viewHolder.group.check(checkedId);
    viewHolder.group.setTag(position);
    viewHolder.group.setOnCheckedChangedListener(checkChangedListener);
    ...
}

private OnCheckedChangedListener checkChangedListener = new OnCheckedChangedListener() {
    @Override
    public void onCheckChanged(RadioGroup group, int checkId) {
        Object tag = group.getTag();
        if (!(tag instanceof Integer)) {
            // you have a bug. Fix it!
            return;
        }

        int position = (Integer) tag;
        Model model = getItem(position);

        switch(checkedId) {
        case R.id.radio_button_1:
            model.setCurrent(Model.ANSWER_ONE_SELECTED); break;
        case R.id.radio_button_1:
            model.setCurrent(Model.ANSWER_TWO_SELECTED); break;
        case R.id.radio_button_1:
            model.setCurrent(Model.ANSWER_THREE_SELECTED); break;
        case R.id.radio_button_1:
            model.setCurrent(Model.ANSWER_FOUR_SELECTED); break;
        }
    }
};