【问题标题】:how do I set a default listview before the listview has been appended with data?如何在列表视图附加数据之前设置默认列表视图?
【发布时间】:2017-07-30 17:32:54
【问题描述】:

我目前有一个列表视图,用于将数据添加到列表视图中。但是,我还希望有一个默认列表,通过列表项解释用户应该做什么(即在由默认值填充的字段中输入任务)。我的代码由一个databasehelper 类、一个databasemanager 和一个实际的activity 组成,它是一个todolist。代码贴在下面

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper {

    // Table Name
    public static final String TABLE_NAME = "todolist";

    // Table columns
    public static final String _ID = "_id";
    public static final String task = "task";

    // Database Information
    static final String DB_NAME = "pset4.s3db";

    // database version
    static final int DB_VERSION = 1;

    // Creating table query
    private static final String CREATE_TABLE =
            "CREATE TABLE " + TABLE_NAME + " (" +
                    _ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
                    task + " TEXT)";

    public DatabaseHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);

    }



import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.nfc.Tag;
import android.util.Log;

import java.util.Arrays;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.widget.EditText;
import android.widget.Toast;

public class DBManager {

    private DatabaseHelper dbHelper;

    private Context context;

    private SQLiteDatabase database;

    public DBManager(Context c) {
        context = c;
    }

    public DBManager open() throws SQLException {
        dbHelper = new DatabaseHelper(context);
        database = dbHelper.getWritableDatabase();
        return this;
    }

    public void close() {
        dbHelper.close();
    }


    public void insert(String name) {
        ContentValues contentValue = new ContentValues();
        contentValue.put(DatabaseHelper.task, name);
        database.insert(DatabaseHelper.TABLE_NAME, null, contentValue);
        fetch();
    }



    public Cursor fetch() {
        String[] columns = new String[] { DatabaseHelper._ID, DatabaseHelper.task };
        Cursor cursor = database.query(DatabaseHelper.TABLE_NAME, columns, null, null, null, null, null);
        if (cursor != null) {
            cursor.moveToFirst();
        }
        else{

        }
        return cursor;
    }

    public int update(long _id, String name) {
        ContentValues contentValues = new ContentValues();
        contentValues.put(DatabaseHelper.task, name);
        int i = database.update(DatabaseHelper.TABLE_NAME, contentValues, DatabaseHelper._ID + " = " + _id, null);
        return i;
    }

    public void delete(long _id) {
        database.delete(DatabaseHelper.TABLE_NAME, DatabaseHelper._ID + "=" + _id, null);
    }


}


import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageInstaller;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.opengl.EGLDisplay;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CursorAdapter;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;
import com.github.paolorotolo.expandableheightlistview.ExpandableHeightListView;

import org.w3c.dom.Text;

import java.io.File;
import java.util.ArrayList;
import java.util.List;


public class MainActivity extends AppCompatActivity {
    private DBManager dbManager;
    private ListView listView;
    private EditText edittext;
    TextView emptyText;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.listview);


        // opens databasemanager
        dbManager = new DBManager(this);
        dbManager.open();


        edittext = (EditText) findViewById(R.id.editText);

        // asks for data from database
        final Cursor cursor = dbManager.fetch();
        final TodoCursorAdapter cursorAdapter = new TodoCursorAdapter(this, cursor);
        listView.setAdapter(cursorAdapter);
        cursorAdapter.notifyDataSetChanged();
        listView.setAdapter(cursorAdapter);
        listView.setLongClickable(true);

        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                                           int arg2, long arg3) {

                Toast.makeText(getApplicationContext(), "Item deleted : ", Toast.LENGTH_LONG).show();
                long id = cursor.getLong(cursor.getColumnIndex(DatabaseHelper._ID));
                deletefromwatchlist((int) id);
                dbManager.delete(id);
                cursorAdapter.notifyDataSetChanged();
                recreate();
                return true;
            }
        });
    }


    public void addtowatchlist(String text){
        final String entry = edittext.getText().toString();
        dbManager.insert(entry);
        recreate();

    }


    public void deletefromwatchlist(int id) {
        dbManager.delete(id);

    }


    @Override
    protected void onDestroy() {
        if (dbManager != null)
        {
            dbManager.close();
        }
        super.onDestroy();
    }

    public void click(View view)
    {
        EditText edittext =  (EditText) findViewById(R.id.editText);
        String text = edittext.getText().toString();
        addtowatchlist(text);
    }

}

【问题讨论】:

  • 通过添加一个包含在列表为空时显示的消息的 xml 文件解决了这个问题。然后检查数据库和/或列表视图是否为空,如果是这种情况,请将空 xml 的可见性设置为 true。

标签: java android sqlite listview default


【解决方案1】:

也许制作自动填充字段的重载函数;如果用户按下该字段,该字段将被清除并调用其他函数。

【讨论】:

    猜你喜欢
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多