问题描述
在我的应用程序中,来自DiaglogBox的用户输入数据已存储到sqlite中,并希望与复选框一起在listview中显示这些数据
示例:
我将用户输入存储在sqlite中,但我不知道如何在列表视图中显示那些已保存的名称以及复选框
如何实现我是Android新手!
数据库:
///在列表视图中显示这些数据以及复选框
// Table 2
private static final String TABLE2_NAME = "listitem_name";
public static final String COLUMN1_ID = "I_ID";
public static final String COLUMN2_TITLE = "LISTITEMS_NAME";
onCreate(){
String query1 =
"CREATE TABLE IF NOT EXISTS " + TABLE2_NAME + "("
+ COLUMN1_ID + " INTEGER PRIMARY KEY,"
+ COLUMN2_TITLE + " TEXT,"
+ COLUMN_ID + " INTEGER," + "FOREIGN KEY("+
COLUMN_ID +") "
+ "REFERENCES " + TABLE_NAME +"("+COLUMN_ID +")"+ ");";
sqliteDatabase.execsql(query1);
}
Cursor readlistAllData() {
String query = "SELECT * FROM " + TABLE2_NAME;
sqliteDatabase db = this.getReadableDatabase();
Cursor cursor = null;
if (db != null) {
cursor = db.rawQuery(query,null);
}
return cursor;
}
ActivityClass
public class AddItems extends AppCompatActivity {
Toolbar mToolbar;
DatabaseHelper myDB;
ArrayList<String> listitems;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_items);
mToolbar = findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab_button);
fab.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ShowPopup();
}
});
myDB = new DatabaseHelper(AddItems.this);
listitems = new ArrayList<>();
displayList();
}
private void displayList(){
Cursor cursor = myDB.readlistAllData();
if (cursor.getCount() == 0) {
Toast.makeText(this,"No Data.",Toast.LENGTH_SHORT).show();
} else {
while (cursor.movetoNext()) {
listitems.add(cursor.getString(1));
}
}
}
private void ShowPopup() {
final Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.custom_dialog);
dialog.getwindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.show();
final EditText lname = dialog.findViewById(R.id.list_Edit_txt);
Button add = dialog.findViewById(R.id.add);
Button cancel = dialog.findViewById(R.id.cancel);
cancel.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
}
});
add.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Toast.makeText(AddItems.this,"add called",Toast.LENGTH_SHORT).show();
String name = lname.getText().toString();
if (!TextUtils.isEmpty(lname.getText().toString())) {
DatabaseHelper db = new DatabaseHelper(getApplicationContext());
db.itemlist(name);
Toast.makeText(AddItems.this,"Added Sucessfully !",Toast.LENGTH_SHORT).show();
ShowPopup();
} else
Toast.makeText(AddItems.this,"The name cannot be empty!",Toast.LENGTH_LONG).show();
}
});
}
解决方法
您可以使用一个ListAdapter类来完成这项工作。 另外,您可以将RecyclerView与RecyclerView适配器一起使用。 使用RecyclerView:
joshskeen.com提供了使用http://joshskeen.com/building-a-radiogroup-recyclerview/中的RecyclerView的分步方法
下面是适合您的情况的适应代码。
RadioAdapter.java
public class RadioAdapter extends RecyclerView.Adapter<RadioAdapter.ViewHolder> {
public int mSelectedItem = -1;
public List<String> mItems;
private Context mContext;
public RadioAdapter(Context context,List<String> items) {
mContext = context;
mItems = items;
}
@Override
public void onBindViewHolder(RadioAdapter.ViewHolder viewHolder,final int i) {
viewHolder.mRadio.setChecked(i == mSelectedItem);
viewHolder.mText.setText(mItems.get(i));
}
@Override
public int getItemCount() {
return mItems.size();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup,int i) {
LayoutInflater inflater = LayoutInflater.from(mContext);
final View view = inflater.inflate(R.layout.list_view_item,viewGroup,false);
return new ViewHolder(view);
}
class ViewHolder extends RecyclerView.ViewHolder {
public RadioButton mRadio;
public TextView mText;
public ViewHolder(final View inflate) {
super(inflate);
mText = (TextView) inflate.findViewById(R.id.text);
mRadio = (RadioButton) inflate.findViewById(R.id.radio);
View.OnClickListener clickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
mSelectedItem = getAdapterPosition();
notifyDataSetChanged();
}
};
itemView.setOnClickListener(clickListener);
mRadio.setOnClickListener(clickListener);
}
}
}
list_view_item.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
在AddItems.java
类中
RadioAdapter RadioAdapter;
List<String> listItems;
@Override
protected final void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
listItems = new ArrayList<String>();
radioAdapter = new RadioAdapter(this,listItems)
recyclerView.setAdapter(radioAdapter);
}
private void DisplayList(){
Cursor cursor = myDB.readlistAllData();
if (cursor.getCount() == 0) {
Toast.makeText(this,"No Data.",Toast.LENGTH_SHORT).show();
} else {
while (cursor.moveToNext()) {
listitems.add(cursor.getString(1));
}
radioAdapter.notifyDataSetChanged();
}
}
}
参考:http://joshskeen.com/building-a-radiogroup-recyclerview/
下面是一些其他有用的链接:
- https://developer.android.com/guide/topics/ui/layout/recyclerview
- https://medium.com/@codeplayon/android-how-get-list-of-checked-checkboxes-from-recyclerview-android-cba31d8e3291
- Single selection in RecyclerView
让我知道是否需要更多帮助。