【发布时间】:2020-10-12 13:52:05
【问题描述】:
我无法在列表视图中显示数据。在对话框中,用户输入项目并单击保存按钮,它将数据存储在 sqlite 数据库中,但不显示在列表视图中。当我移动到MainActivity.java 并返回到AddCount.java 时,它会显示存储在 sqlite 数据库中的项目。用户单击对话框中的保存后,如何在列表视图中显示该项目
public class AddCount extends AppCompatActivity {
ArrayList<User>userList;
User user;
DbHandler myDB;
Cursor data;
int numRows;
Two_columnListAdapter adapter;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_count);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
ListView listView = (ListView)findViewById(R.id.listview);
myDB = new DbHandler(this);
userList = new ArrayList<>();
data = myDB.getListContents();
numRows = data.getCount();
if (numRows == 0) {
Toast.makeText(AddCount.this, "There is nothing in database", Toast.LENGTH_LONG).show();
} else {
while (data.moveToNext()) {
user = new User(data.getString(1), data.getString(2));
userList.add(user);
}
}
adapter = new Two_columnListAdapter(this,R.layout.list_item_layout,userList);
listView.setAdapter(adapter);
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openDialog();
}
});
}
public void openDialog() {
final AlertDialog.Builder mydialog = new AlertDialog.Builder(AddCount.this);
mydialog.setTitle("Add Count");
LinearLayout layout = new LinearLayout(AddCount.this);
layout.setOrientation(LinearLayout.VERTICAL);
final EditText title = new EditText(AddCount.this);
title.setHint("Title");
layout.addView(title);
final EditText value = new EditText(AddCount.this);
value.setHint("Count");
layout.addView(value);
mydialog.setView(layout);
mydialog.setPositiveButton("Save", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
String UserTitle = title.getText().toString();
String UserCount = value.getText().toString();
if (UserTitle.length()!= 0 && UserCount.length() != 0) {
AddData(UserTitle,UserCount);
title.setText("");
value.setText("");
adapter.notifyDataSetChanged();
}
else {
Toast.makeText(AddCount.this ,"Empty!",Toast.LENGTH_SHORT).show();
}
}
}).create();
mydialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel();
}
}).create();
mydialog.show();
}
public void AddData(String title,String count){
boolean insertData = myDB.insertUserInputs(title, count);
if (insertData==true){
Toast.makeText(AddCount.this ,"Saved",Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(AddCount.this ,"Some thing went wrong",Toast.LENGTH_SHORT).show();
}
}
}
DbHandler.java(创建和管理数据库)
public class DbHandler extends SQLiteOpenHelper {
private static final int DB_VERSION = 1;
private static final String DB_NAME = "users.db";
private static final String TABLE_Inputs = "userinputs";
private static final String KEY_ID = "id";
private static final String KEY_Title = "Title";
private static final String KEY_Count = "Count";
public DbHandler(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// Create a new table
String CREATE_TABLE = "CREATE TABLE " + TABLE_Inputs + "(ID INTEGER PRIMARY KEY AUTOINCREMENT," + "Title,Count)";
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if exist
db.execSQL("DROP TABLE IF EXISTS " + TABLE_Inputs);
// Create tables again
onCreate(db);
}
public boolean insertUserInputs(String UserTitle, String UserCount) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(KEY_Title, UserTitle);
contentValues.put(KEY_Count, UserCount);
long newRowId = db.insert(TABLE_Inputs, null, contentValues);
if (newRowId == -1){
return false;
}
else {
return true;
}
}
public Cursor getListContents(){
SQLiteDatabase db = this.getWritableDatabase();
Cursor data = db.rawQuery("SELECT * FROM " + TABLE_Inputs,null);
return data;
}
}
Two_columnListAdapter.java
public class Two_columnListAdapter extends ArrayAdapter<User> {
private LayoutInflater layoutInflater;
private ArrayList<User>users;
private int mviewResourceId;
public Two_columnListAdapter(Context context,int textViewResourceId,ArrayList<User>users){
super(context,textViewResourceId,users);
this.users = users;
layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mviewResourceId = textViewResourceId;
}
public View getView(int position, View convertView, ViewGroup parents){
convertView = layoutInflater.inflate(mviewResourceId,null);
User user= users.get(position);
if (user != null){
TextView text = (TextView)convertView.findViewById(R.id.title);
TextView num = (TextView)convertView.findViewById(R.id.value);
if (text != null){
text.setText(user.getText());
}
if (num != null){
num.setText(user.getNum());
}
}
return convertView;
}
}
【问题讨论】: