0
 public class Breakfast extends Activity implements OnItemClickListener {

DBOpener dbopener;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //for fullscreen view
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.dinner);

    dbopener = new DBOpener(this);
}

// Open the DB, query all subject codes and refresh the listview when app resumes
@Override
protected void onResume() {
    super.onResume();

    // Configure the listview
    ArrayList<String> mealNames = new ArrayList<String>();
    ListView lstDine = (ListView)this.findViewById(R.id.dine);
    lstDine.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, mealNames));

    // Open/create the DB
    try
    {
      dbopener.createDatabase(); // Create DB if necessary
      dbopener.openDatabase(); // Open the DB

      Cursor dinners = dbopener.getBreakfastNames();
      while (dinners.moveToNext()) {
          mealNames.add(dinners.getString(0)); // Get the Lunch Name & adds to list                                                 
      }
      dinners.close();

      // Update the listview
      ArrayAdapter<String> ad = (ArrayAdapter<String>)lstDine.getAdapter();
      ad.notifyDataSetChanged();     
      lstDine.setOnItemClickListener(this);
    }
    catch (Exception e)
    {
        Toast.makeText(this, "Could not open DB", //Display when Database Cannot be opened
        Toast.LENGTH_LONG).show();
    }
}

//Close the DB when app pauses
@Override
protected void onPause() {
    super.onPause();        
    dbopener.close();
}

// When user clicks on an item
public void onItemClick(AdapterView<?> parent, View v, int pos, long id) {

    switch(pos)
    {

        case 0 :
        Intent event1 = new Intent("com.edu.tp.iit.mns.Display");
        //event1.putExtra("name" , ???);
        //event1.putExtra("nutrition" , ???);
        //event1.putExtra("rating" , ???);
        startActivity(event1);
        break;

これはコードの一部にすぎません。(???) の中に何を入れればいいのか知りたいです。そのリストビューアイテム..ケース0の場合、栄養と評価の名前をDisplayクラスに表示したい。これは、SQLite データベース ブラウザを使用して作成した私のデータベースです。

   public class DBOpener extends SQLiteOpenHelper {

    private static String DB_PATH = 
   "/data/data/com.edu.tp.iit.mns/databases/"; //path of our database
    private static String DB_NAME ="finals"; // Database name
    private final Context myContext;
    private SQLiteDatabase db;



@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub

}

public DBOpener(Context context) {
    super(context, DB_NAME, null, 1);
    myContext = context;
}

public void createDatabase() throws IOException {
    boolean dbExists = checkDatabase();
    if (dbExists) {
        // Do nothing, DB already exists
        Log.d("DBOpener", "DB exists");
    } else {
        // By calling this method an empty database will be created
            // in the default system path of your application, which we
            // will overwrite with our own database.
        Log.d("DBOpener", "DB does not exit - copying from assets");
        this.getReadableDatabase();
        copyDatabase();
        }
}


private boolean checkDatabase() {
    SQLiteDatabase checkDB = null;
    try {
        // Try opening the database
        String path = DB_PATH + DB_NAME;
        checkDB = SQLiteDatabase.openDatabase(path, null, 
            SQLiteDatabase.OPEN_READONLY);
    } catch (SQLiteException e) {
        // If it fails, DB does not exist
    }
    if (checkDB != null)
        checkDB.close(); // Close the DB; we don’t need it now
    return checkDB != null;
}

private void copyDatabase() throws IOException {
    InputStream istream = myContext.getAssets().open(DB_NAME);
    OutputStream ostream = new FileOutputStream(DB_PATH + DB_NAME);
    // Transfer bytes from istream to ostream
    byte[] buffer = new byte[1024];
    int length;
    while ((length = istream.read(buffer)) > 0) {
        ostream.write(buffer, 0, length);
    }
    // Close streams
    istream.close();
    ostream.flush();
    ostream.close();
}

public void openDatabase() throws SQLiteException {
    db = SQLiteDatabase.openDatabase(DB_PATH + DB_NAME, null, 
        SQLiteDatabase.OPEN_READWRITE);
}

@Override
public synchronized void close() {
    if (db != null)
        db.close();
    super.close();
}

// Retrieve all subject codes
public Cursor getDinnerNames() {
    if (db == null)
        return null;
    return db.query("dinner", new String[] {"name"},
        null, null, null, null, null);
}


// Get details of specific subject
public Cursor getDinnerDetails(String name) {
    if (db == null)
        return null;
    return db.query("dinner", new String[] {"name", "nutrition", "rating"},
        "name = ?", new String[] {name}, null, null, null);
}

// Retrieve all subject codes
public Cursor getLunchNames() {
    if (db == null)
        return null;
    return db.query("lunch", new String[] {"name"},
        null, null, null, null, null);
}

// Get details of specific subject
    public Cursor getLunchDetails(String name) {
        if (db == null)
            return null;
        return db.query("dinner", new String[] {"name", "nutrition", "rating"},
            "name = ?", new String[] {name}, null, null, null);
    }

    // Retrieve all subject codes
    public Cursor getBreakfastNames() {
        if (db == null)
            return null;
        return db.query("breakfast", new String[] {"name"},
            null, null, null, null, null);
    }

    // Get details of specific subject
    public Cursor getBreakfastDetails(String name) {
        if (db == null)
            return null;
        return db.query("breakfast", new String[] {"name", "nutrition", "rating"},
            "name = ?", new String[] {name}, null, null, null);
    }
 }
4

1 に答える 1

2

したがって、putExtra()メソッドは拡張データをインテントに追加します。を介してデータを渡したいときに使用するので、Activitiesfloat、integer、short などのすべてのプリミティブ型、または のような参照型を配置できますStringBundleメソッドでオブジェクトを追加することputExtras()も otherできますObjectsしたがって、必要なデータ型をインテントに追加します

これを参照してください:

ここに画像の説明を入力

に追加Objectする例Intent:

Intent intent = new Intent(DownloadingActivity.this, DownloadService.class);
                        intent.putExtra("url", "http://dl.dropbox.com/u/67617541/DOR0023.rar");
                        intent.putExtra("receiver", new DownloadReceiver(new Handler()));

Intent hereについて何か読む必要があります

したがってArrayAdapter、文字列を作成し、それを使用getBreakfastNames()して朝食の名前のみを返すので、インテントのみに追加できます

String name = (String) parent.getItemAtPosition(pos);
event1.putExtra("name", name);

ただし、たとえばから拡張するクラスを作成し、SimpleCursorAdapterデザインパターンを使用Holderしてデータを完全に制御することをお勧めしますListView。よりクリーンに、より速く。

于 2012-06-03T17:55:58.100 に答える