在列表中的radiogroup的cardview中,已经检查了一些单选按钮

时间:2016-05-09 13:27:08

标签: java android radio-button android-cardview android-radiogroup

我在android中创建了带有无线电组的cardview我正在制作学生参加者系统,我已经做了后端部分和学生列表正确出现并且在卡片中显示但问题是在现在的时间,或者没有学生的标记,我曾在每张卡片中使用带有4个单选按钮的radiogroup。但是一些单选按钮已被检查,当我滚动时,单选按钮的位置也在变化。: - 每张卡的代码是

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    card_view:cardCornerRadius="5dp"

    card_view:cardUseCompatPadding="true" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp" >

        <TextView
            android:id="@+id/tvName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:text="name"
            android:textColor="@android:color/black"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tvEmailId"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/tvName"
            android:text="email"
            android:textColor="@android:color/black"
            android:textSize="18sp" />
<RadioGroup android:id="@+id/rg"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"

    android:layout_width="wrap_content"
    android:layout_height="wrap_content">


        <RadioButton
            android:id="@+id/chkSelected"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:text="A"
            android:checked="false">


        </RadioButton>

        <RadioButton
            android:id="@+id/chkSelected2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="64dp"
            android:layout_marginEnd="64dp"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@+id/chkSelected"
            android:layout_toStartOf="@+id/chkSelected"
            android:text="P"
            android:checked="false">


        </RadioButton>

</RadioGroup>

    </RelativeLayout>

</android.support.v7.widget.CardView>

和checkboxsample.xml的代码

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

    <LinearLayout
        android:layout_width="fill_parent"
        android:orientation="horizontal"
        android:gravity="center"
        android:layout_height="wrap_content">

        <Button
            android:layout_width="wrap_content"
            android:text="Check All"
            android:layout_marginRight="7dip"
            android:id="@+id/btnCheckAll"
            android:layout_height="wrap_content">
        </Button>
        <Button
            android:layout_width="wrap_content"
            android:text="Clear All"
            android:id="@+id/btnClearAll"
            android:layout_height="wrap_content">
        </Button>
    </LinearLayout>

    <ListView
        android:layout_width="fill_parent"
        android:id="@+id/lvCheckBox"
        android:fadingEdge="none"
        android:cacheColorHint="@null"
        android:layout_height="fill_parent">
    </ListView>
</LinearLayout>

activity_main.xml的代码

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

    <include
        android:id="@+id/toolbar"
        layout="@layout/toolbar" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/my_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_margin="5dp"
        android:layout_weight="1"
        android:scrollbars="vertical" />

    <Button
        android:id="@+id/btnShow"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:text="Show Selected"
        android:background="#00796B" 
        android:textColor="@color/TextPrimaryColor"/>

</LinearLayout>

student.java的代码

package com.example.administrator.cardviewcheckbok;

import java.io.Serializable;

public class Student implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private String name;

    private String emailId;

    private boolean isSelected;

    public Student() {

    }

    public Student(String name, String emailId) {

        this.name = name;
        this.emailId = emailId;

    }

    public Student(String name, String emailId, boolean isSelected) {

        this.name = name;
        this.emailId = emailId;
        this.isSelected = isSelected;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmailId() {
        return emailId;
    }

    public void setEmailId(String emailId) {
        this.emailId = emailId;
    }

    public boolean isSelected() {
        return isSelected;
    }

    public void setSelected(boolean isSelected) {
        this.isSelected = isSelected;
    }

}

cardviewdataadapter.java的代码

package com.example.administrator.cardviewcheckbok;

import java.util.List;

import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;

import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.CompoundButton.OnCheckedChangeListener;

public class CardViewDataAdapter extends
        RecyclerView.Adapter<CardViewDataAdapter.ViewHolder> {

    private List<Student> stList;

    public CardViewDataAdapter(List<Student> students) {
        this.stList = students;

    }

    // Create new views
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent,
            int viewType) {
        // create a new view
        View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(
                R.layout.cardview_row, null);

        // create ViewHolder

        ViewHolder viewHolder = new ViewHolder(itemLayoutView);

        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int position) {

        final int pos = position;

        viewHolder.tvName.setText(stList.get(position).getName());

        viewHolder.tvEmailId.setText(stList.get(position).getEmailId());

        viewHolder.chkSelected.setSelected(stList.get(position).isSelected());

        viewHolder.chkSelected.setTag(stList.get(position));
////new checkselected2

        viewHolder.chkSelected2.setSelected(stList.get(position).isSelected());

        viewHolder.chkSelected2.setTag(stList.get(position));

viewHolder.checkrgg.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        RadioGroup rgg=(RadioGroup)v;
int selbutid=rgg.getCheckedRadioButtonId();

    RadioButton rb= (RadioButton) rgg.getChildAt(selbutid);
Toast.makeText(v.getContext(),""+rb.getText()+"",Toast.LENGTH_LONG).show();

    }
});

        viewHolder.chkSelected.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                RadioButton cb = (RadioButton) v;

                Student contact = (Student) cb.getTag();

                contact.setSelected(cb.isSelected());
                stList.get(pos).setSelected(cb.isSelected());

    /*          Toast.makeText(
                        v.getContext(),
                        "Clicked on Checkbox: " + "" + pos + cb + " is "
                                + cb.isSelected(), Toast.LENGTH_LONG).show();
    */
                    }

            });


        viewHolder.chkSelected2.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                RadioButton cb = (RadioButton) v;

                Student contact = (Student) cb.getTag();

                contact.setSelected(cb.isSelected());
                stList.get(pos).setSelected(cb.isSelected());
/*
                Toast.makeText(
                        v.getContext(),
                        "2222222Clicked on Checkbox: "+""+pos +cb + " is "
                                + cb.isSelected(), Toast.LENGTH_LONG).show();
                */
                    }
        });



    }

    // Return the size arraylist
    @Override
    public int getItemCount() {
        return stList.size();
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {

        private final RadioGroup checkrgg;
        public TextView tvName;
        public TextView tvEmailId;

        public RadioButton chkSelected,chkSelected2;

        public Student singlestudent;

        public ViewHolder(View itemLayoutView) {
            super(itemLayoutView);

            tvName = (TextView) itemLayoutView.findViewById(R.id.tvName);

            tvEmailId = (TextView) itemLayoutView.findViewById(R.id.tvEmailId);
            chkSelected = (RadioButton) itemLayoutView
                    .findViewById(R.id.chkSelected);

            ///here putted code
            chkSelected2 = (RadioButton) itemLayoutView
                    .findViewById(R.id.chkSelected2);
////
            checkrgg=(RadioGroup)itemLayoutView.findViewById(R.id.rg);

        }

    }

    // method to access in activity after updating selection
    public List<Student> getStudentist() {
        return stList;
    }

}

cardviewactivity.java的代码

package com.example.administrator.cardviewcheckbok;

import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class CardViewActivity extends ActionBarActivity {

    private Toolbar toolbar;

    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

    private List<Student> studentList;

    private Button btnSelection;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        btnSelection = (Button) findViewById(R.id.btnShow);

        studentList = new ArrayList<Student>();

        for (int i = 1; i <= 15; i++) {
            Student st = new Student("Student " + i, "androidstudent" + i
                    + "@gmail.com", false);

            studentList.add(st);
        }

        if (toolbar != null) {
            setSupportActionBar(toolbar);
            getSupportActionBar().setTitle("Android Students");

        }

        mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

        // use this setting to improve performance if you know that changes
        // in content do not change the layout size of the RecyclerView
        mRecyclerView.setHasFixedSize(true);

        // use a linear layout manager
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

        // create an Object for Adapter
        mAdapter = new CardViewDataAdapter(studentList);

        // set the adapter object to the Recyclerview
        mRecyclerView.setAdapter(mAdapter);

        btnSelection.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                String data = "";
                List<Student> stList = ((CardViewDataAdapter) mAdapter)
                        .getStudentist();

                for (int i = 0; i < stList.size(); i++) {
                    Student singleStudent = stList.get(i);
                    if (singleStudent.isSelected() == true) {

                        data = data + "\n" + singleStudent.getName().toString();
                        /*
                         * Toast.makeText( CardViewActivity.this, " " +
                         * singleStudent.getName() + " " +
                         * singleStudent.getEmailId() + " " +
                         * singleStudent.isSelected(),
                         * Toast.LENGTH_SHORT).show();
                         */

                ////
                                                }

                }

                Toast.makeText(CardViewActivity.this,
                        "Selected Students: \n" + data, Toast.LENGTH_LONG)
                        .show();
            }
        });

    }

}

请这些是一个很大的问题。其实如果我们使用list这样做也会出现同样的错误,所以想要社区的帮助请对这些问题给出一些建议。 &#34;列表中带有广播组的卡片视图&#34;

1 个答案:

答案 0 :(得分:0)

以下是我的示例代码:

请查看“RecyclerViewAdapter.java”,“onBindViewHolder”事件。

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private static RecyclerViewAdapter adapter;
    private LinearLayoutManager layoutManager;
    private static RecyclerView recyclerView;
    private List<Book> data = new ArrayList<>();

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

        getNextItems();
        recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setHasFixedSize(false);
        recyclerView.setLayoutManager(layoutManager);
        adapter = new RecyclerViewAdapter(data, this, recyclerView);
        recyclerView.setAdapter(adapter);
        recyclerView.setItemAnimator(new DefaultItemAnimator());

        adapter.setOnLoadMoreListener(new RecyclerViewAdapter.OnLoadMoreListener() {
            @Override
            public void onLoadMore() {
                Log.i("LoadMore", "onLoadMore called");
                //add progress item
                data.add(null);
                adapter.notifyDataSetChanged();

                Log.i("LoadMore", "Loading new data... (" + 10 + ") posts");
                //remove progress item
                data.remove(data.size() - 1);

                getNextItems();

                adapter.notifyDataSetChanged();
                //add items one by one

                adapter.setLoaded();
            }
        });

    }

    private void getNextItems() {
        int itemCount = data.size();
        for (int i = itemCount; i <= itemCount + 10; i++) {
            Book book = new Book();
            book.title = "Title " + i;
            book.author = "Author " + i;
            book.description = "Description " + i;
            book.status = -1;
            data.add(book);
        }
    }

}

RecyclerViewAdapter.java

public class RecyclerViewAdapter extends RecyclerView.Adapter {
    private List<Book> dataSet;
    private Context context;

    private final int VIEW_ITEM = 1;
    private final int VIEW_PROG = 0;

    // The minimum amount of items to have below your current scroll position before loading more.
    private int visibleThreshold = 1;
    private int lastVisibleItem, totalItemCount;
    private boolean loading;
    private OnLoadMoreListener onLoadMoreListener;
    private Map<Integer, Integer> status;

    public RecyclerViewAdapter(List<Book> data, Context context, RecyclerView recyclerView) {
        this.dataSet = data;
        this.context = context;
        status = new ArrayMap<>();
        final LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                final LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
                totalItemCount = linearLayoutManager.getItemCount();
                lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();
                if (!loading && totalItemCount <= (lastVisibleItem + visibleThreshold)) {
                    loading = true;
                    // End has been reached
                    // Do something
                    Log.i("AdapterScrolled", "onScrolled: End reached");
                    if (onLoadMoreListener != null) {
                        onLoadMoreListener.onLoadMore();
                    }

                }
            }
        });

    }

    public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView description;
        TextView title;
        TextView author;
        ImageView profilePic;
        RadioGroup radioGroup;

        public MyViewHolder(View itemView) {
            super(itemView);
            this.profilePic = (ImageView) itemView.findViewById(R.id.profile_image);
            this.title = (TextView) itemView.findViewById(R.id.title);
            this.author = (TextView) itemView.findViewById(R.id.author);
            this.description = (TextView) itemView.findViewById(R.id.description);
            radioGroup = (RadioGroup) itemView.findViewById(R.id.radio_group);
        }
    }

    @Override
    public int getItemCount() {
        return dataSet.size();
    }

    @Override
    public int getItemViewType(int position) {
        return dataSet.get(position) != null ? VIEW_ITEM : VIEW_PROG;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        RecyclerView.ViewHolder vh;
        if (viewType == VIEW_ITEM) {
            View v = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.book_layout, parent, false);

            vh = new MyViewHolder(v);
        } else {
            View v = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.progress_bar_layout, parent, false);

            vh = new ProgressViewHolder(v);
        }
        return vh;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
        if (holder instanceof MyViewHolder) {
//                Binding Views...

            Book book = dataSet.get(position);
            ((MyViewHolder) holder).profilePic.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.empty_user));
            ((MyViewHolder) holder).title.setText(book.title);
            ((MyViewHolder) holder).author.setText(book.author);
            ((MyViewHolder) holder).description.setText(book.description);

            final RadioGroup radioGroup = ((MyViewHolder) holder).radioGroup;
            radioGroup.setTag(book);
            radioGroup.clearCheck();
            final RadioButton radioButton1 = (RadioButton) radioGroup.findViewById(R.id.low);
            final RadioButton radioButton2 = (RadioButton) radioGroup.findViewById(R.id.medium);
            final RadioButton radioButton3 = (RadioButton) radioGroup.findViewById(R.id.high);

            int value = book.status;
            if (value == 0) {
                radioButton1.setChecked(true);
            } else if (value == 1) {
                radioButton2.setChecked(true);
            } else if (value == 2) {
                radioButton3.setChecked(true);
            }

            radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(RadioGroup group, int checkedId) {
                    Book tagBook = (Book) radioGroup.getTag();
                    if (radioButton1.isChecked()) {
                        tagBook.status = 0;
                    } else if (radioButton2.isChecked()) {
                        tagBook.status = 1;
                    } else if (radioButton3.isChecked()) {
                        tagBook.status = 2;
                    }
                }
            });

        } else {
            ((ProgressViewHolder) holder).progressBar.setIndeterminate(true);
        }
    }

    public void setLoaded() {
        loading = false;
    }

    public void setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener) {
        this.onLoadMoreListener = onLoadMoreListener;
    }

    public interface OnLoadMoreListener {
        void onLoadMore();
    }

    public static class ProgressViewHolder extends RecyclerView.ViewHolder {
        public ProgressBar progressBar;

        public ProgressViewHolder(View v) {
            super(v);
            progressBar = (ProgressBar) v.findViewById(R.id.progressBar);
        }
    }
}

Book.java

public class Book {
    String title;
    String author;
    String description;
    int status = -1;
}

book_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/book_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="2dp"
    android:background="@drawable/border"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="5dp">

    <ImageView
        android:id="@+id/profile_image"
        android:layout_width="50dp"
        android:layout_height="50dp" />

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center" />

    <TextView
        android:id="@+id/author"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center" />

    <TextView
        android:id="@+id/description"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center" />

    <RadioGroup
        android:id="@+id/radio_group"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <RadioButton
            android:id="@+id/low"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Low" />

        <RadioButton
            android:id="@+id/medium"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Medium" />

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

</LinearLayout>