【发布时间】:2016-03-24 12:31:16
【问题描述】:
这可能是个愚蠢的问题,如何在 recyclerview android 中获取已检查项目的文本值和 id 在这里让我解释一下我的要求,即绑定 recyclerview 与 sqlitedatabase 一切正常,但我无法从中获取检查值和 id那recyclerview我该怎么做让我分享我的代码到目前为止我做了什么:
这是我设置为 recyclerview 的适配器:
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;
public class CardViewDataAdapter extends
RecyclerView.Adapter<CardViewDataAdapter.ViewHolder> {
private List<Model_Account> stList;
public CardViewDataAdapter(List<Model_Account> students) {
this.stList = students;
}
// Create new views
@Override
public CardViewDataAdapter.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.chkSelected.setChecked(stList.get(position).isSelected());
viewHolder.chkSelected.setTag(stList.get(position));
viewHolder.chkSelected.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v;
Model_Account contact = (Model_Account) cb.getTag();
contact.setSelected(cb.isChecked());
stList.get(pos).setSelected(cb.isChecked());
Toast.makeText(
v.getContext(),
"Clicked on Checkbox: " + cb.getText() + " is "
, Toast.LENGTH_LONG).show();
}
});
}
// Return the size arraylist
@Override
public int getItemCount() {
return stList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView tvName;
public TextView tvEmailId;
public CheckBox chkSelected;
public Model_Account singlestudent;
public ViewHolder(View itemLayoutView) {
super(itemLayoutView);
tvName = (TextView) itemLayoutView.findViewById(R.id.tvName);
tvEmailId = (TextView) itemLayoutView.findViewById(R.id.tvEmailId);
chkSelected = (CheckBox) itemLayoutView
.findViewById(R.id.chkSelected);
}
}
// method to access in activity after updating selection
public List<Model_Account> getStudentist() {
return stList;
}
这是将适配器设置为 recyclerview 并需要在 onclick 按钮中获取值的活动:
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import java.util.ArrayList;
import java.util.List;
public class ServiceCatlogActivity extends AppCompatActivity {
private List<Model_Account> statelist;
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
Button ok;
private RecyclerView.LayoutManager mLayoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_service_catlog);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
statelist = new ArrayList<Model_Account>();
ok = (Button) findViewById(R.id.btnShow);
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
Account_SF_DB account_sf_db = new Account_SF_DB(getApplicationContext());
statelist = account_sf_db.Statelist();
// 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(statelist);
// set the adapter object to the Recyclerview
mRecyclerView.setAdapter(mAdapter);
ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List<Model_Account> stList = ((CardViewDataAdapter) mAdapter)
.getStudentist();
String[] data = new String[stList.size()];
Integer []ints=new Integer[stList.size()];
for (int i = 0; i < stList.size(); i++) {
Model_Account singleStudent = stList.get(i);
if (singleStudent.isSelected()) {
//Here i need to pick the id and text of the checked value how can i do this!!
}
}
}
});
}
}
}
这是 sqliteonehelper 类:
public List<Model_Account> Statelist() {
String countQuery = "SELECT * FROM " + Model_Account.spinner_state_table;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
List<Model_Account>listobj = new ArrayList<Model_Account>();
if (cursor.moveToFirst()) {
do {
Model_Account modelobj = new Model_Account();
modelobj.setStateid(cursor.getInt(cursor.getColumnIndex(Model_Account._id)));
modelobj.setName(cursor.getString(cursor.getColumnIndex(Model_Account.StateName)));
modelobj.setStateid(cursor.getInt(cursor.getColumnIndex(Model_Account.PairlinkID)));
listobj.add(modelobj);
} while (cursor.moveToNext());
}
cursor.close();
db.close();
return listobj;
}
这里需要通过 bundle 将文本和 id 传递给下一个活动,这可能是一个愚蠢的问题,但作为初学者,它安静令人困惑
【问题讨论】:
-
你想获取哪个视图的id和文本?
-
我从 sqlite db 初始化的 ID
标签: android sqlite android-recyclerview