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()方法将扩展数据添加到意图中。因此,当您想通过 传递数据时使用它Activities,您可以放置​​所有原始类型,如浮点、整数、短或引用类型,如String. 您可以使用其他方法添加Bundle对象。所以你添加到你需要的意图数据类型putExtras()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 的内容

因此,您创建ArrayAdapter了字符串并使用getBreakfastNames()该返回仅早餐名称,因此您可以仅添加到意图

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

但我建议您创建从例如扩展的类SimpleCursorAdapter并使用设计模式Holder来完全控制您的数据ListView。它更干净,更快。

于 2012-06-03T17:55:58.100 回答