putExtra方法值?

时间:2012-06-03 17:44:51

标签: android listview sqlite

 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);
    }
 }

1 个答案:

答案 0 :(得分:2)

所以putExtra()方法将扩展数据添加到intent中。因此,当您想要通过Activities传递数据时使用它,您可以将所有基本类型(如float,integer,short)或引用类型(如String)放在一起。您可以使用方法Bundle以及其他putExtras()添加Objects对象。 因此,您需要添加所需的intent数据类型。

见:

enter image description here

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中的数据。它更干净,更快。