0

まず第一に、私は完全な Java 初心者です。これまでのところ、必要なことはすべてスクリプト言語でできていましたが、今度は Android アプリを作成する必要があり、道に迷いました。

ListView に sqlite データベースの項目を入力しようとしています。その個々の部分は機能しますが、それらを一緒に機能させることはできません。

データベース クエリ:

Cursor cursor = database.query("db", new String[] { "_id", "name", "count", "should" }, null, null, null, null, null);

listitem.xml:

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

    <TextView
        android:id="@+id/ItemName"
        android:layout_width="fill_parent"
        android:layout_height="40dp"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@+id/ItemCount"
        android:text="TextView" />

    <TextView
        android:id="@+id/ItemCount"
        android:layout_width="50dp"
        android:layout_toLeftOf = "@+id/buttonminus"
        android:layout_height="40dp"
        android:layout_centerVertical="true"
        android:text="TextView" />
    <TextView
        android:id="@+id/ItemShould"
        android:layout_width="50dp"
        android:layout_toLeftOf = "@+id/buttonminus"
        android:layout_height="40dp"
        android:layout_centerVertical="true"
        android:text="TextView" />
    <Button
        android:id="@+id/buttonminus"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:onClick="buttonMinus"
        android:layout_centerVertical="true"
        android:layout_toLeftOf = "@+id/buttonplus"
        android:focusable="false"
        android:text="-" />        

    <Button
        android:id="@+id/buttonplus"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_alignParentRight = "true"
        android:focusable="false"
        android:layout_centerVertical="true"
        android:onClick="buttonPlus"
        android:text="+" />

</RelativeLayout>

そして、そのリストに固定配列を入力する作業中のJavaコードがありますが、そこにdbクエリを取得することはできません:

    private String[][] ItemsArray =
        {{"Test1","10"},
            {"Test2","20"},
            {"Test3","123"},
            {"Test4","456"}}; 
    HashMap<String,String> item;
    for(int i=0;i<ItemsArray.length;i++){
      item = new HashMap<String,String>();
      item.put( "ItemName", ItemsArray[i][0]);
      item.put( "ItemCount", ItemsArray[i][1]);
      item.put( "ItemShould", ItemsArray[i][2]);
      list.add( item );
    }        
    sa = new SimpleAdapter(this, list, R.layout.mylistitem, new String[] { "ItemName","ItemCount","ItemShould" }, new int[] {R.id.ItemName, R.id.ItemCount, R.id.ItemShould});        
    setListAdapter(sa);

また、後でその行を削除するためにIDを(目に見えないように)そのリストのどこかに置く必要がありますが、その方法はまったくわかりません:-(

助けていただければ幸いです。

更新: このように試してみましたが、これによりアプリが FC になります

Cursor cursor = database.query("inventory", new String[] { "_id", "name", "ist", "soll" }, null, null, null, null, null);

int i = 0;
cursor.moveToFirst();
HashMap<String,String> item;
ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
while (cursor.isAfterLast() == false) {
    item = new HashMap<String,String>();
    item.put( "ItemName", cursor.getString(1));
    item.put( "ItemCount", cursor.getString(2));
    list.add( item );
    cursor.moveToNext();
}
cursor.close();

sa = new SimpleAdapter(this, list, R.layout.mylistitem, new String[] { "ItemName","ItemCount","ItemShould" }, new int[] {R.id.ItemName, R.id.ItemCount, R.id.ItemShould});        
setListAdapter(sa);
4

1 に答える 1

0

データベースを操作するヘルパーの例 public class DBHelper extends SQLiteOpenHelper {

public static interface DESTINATION extends BaseColumns {
        String TABLE_NAME = "destination";
        String NAME = "name";
    }

private static final String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS ";

private static final String CREATE_TABLE_DESTINATION = CREATE_TABLE + DESTINATION.TABLE_NAME + " (" 
            + DESTINATION._ID + " INTEGER PRIMARY KEY , " + DESTINATION.NAME + " TEXT );";

private static final String DATABASE_NAME = "TravelCompany";
    private static final int DATABASE_VERSION = 2;
public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
@Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE_DESTINATION);
    }

@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + DESTINATION.TABLE_NAME);
        onCreate(db);
    }
public void insertDestination(String destinationName) {
        ContentValues values = new ContentValues();
        values.put(DESTINATION.NAME, destinationName);
        getWritableDatabase().insert(DESTINATION.TABLE_NAME, null, values);
    }
public Cursor getAllDestination() {
        return getReadableDatabase().query(DESTINATION.TABLE_NAME, new String[] { DESTINATION.NAME }, null,
                null, null, null, null);
    }
}
Than create layout with listview. Add another layout for one row. 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" >

&lt;TextView
        android:id="@+id/rowText" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" />
</LinearLayout>

そして、次のようにアダプターを作成します。

DBHelper dataHelper = new DBHelper(this);

ListView testList = (ListView) findViewById(R.id.mylist);

SimpleCursorAdapter アダプター = new SimpleCursorAdapter(this, R.layout.row_myrow, testCursor,

new String[] { DBHelper.DESTINATION.NAME }, new int[] { R.id.rowText },

SimpleCursorAdapter.IGNORE_ITEM_VIEW_TYPE);

testList.setAdapter(アダプター);

于 2013-04-09T07:49:50.103 に答える