如何将整数传递给类的实例并使用它来调用另一个类的方法?

时间:2012-11-26 04:52:27

标签: android android-intent cursor bundle adapter

这里的活动1是列表视图。当用户点击某个项目时,我希望单击该项目以启动一个类的实例并将一个int值传递给它,稍后将在交换机中使用该值。

       @Override
    public void onItemClick(AdapterView<?> adapter, View view,
                int position, long id) {


    switch(position){

   case 0:


       Intent g = new Intent(books.this, SpecificBook.class);
       Bundle b = new Bundle();
       b.putInt("dt", 0);
       g.putExtras(b);
       books.this.startActivity(g);
       break;

    case 1: 
        Intent ex = new Intent(books.this, SpecificBook.class);
       Bundle b1 = new Bundle();
       b1.putInt("dt", 1);
       ex.putExtras(b1);
       books.this.startActivity(ex);
      break;

      //etc.

这里是活动2,它应该检索int值并从数据库助手类调用适当的方法。

      public class SpecificBook extends Activity {

       private DatabaseHelper Adapter;

Intent myLocalIntent = getIntent();
 Bundle myBundle = myLocalIntent.getExtras();
  int dt = myBundle.getInt("dt");

 @SuppressWarnings("deprecation")
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
  setContentView(R.layout.listy);


ListView lv = (ListView)findViewById(R.id.listview);     
 Adapter = new DatabaseHelper(this);
 Adapter.open();    
 Cursor cursor = null;


switch(dt){
 case 0:cursor = DatabaseHelper.getbook1Data(); break;
 case 1:cursor = DatabaseHelper.getbook2Data(); break;
  //etc.
}

startManagingCursor(cursor);

数据库方法是查询。 基本上,我希望book class listview中的每个项目都根据所选项目运行它自己的查询并显示结果。 我得到“源未找到”和runtimeexception错误。我哪里错了?有没有更好的方法来解决这个问题?

我已经尝试过“getter and setter”的方式无济于事。我也在意图的实例上尝试了“putextra”方法但是没有用。

1 个答案:

答案 0 :(得分:2)

您最早可以访问Intent的是onCreate()

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listy);

    Intent myLocalIntent = getIntent();
    Bundle myBundle = myLocalIntent.getExtras();
    int dt = myBundle.getInt("dt");

您应该检查Intent或Bundle是否为null,如果您只想要Intent中的一个项目,则可以使用:

Intent myLocalIntent = getIntent();
if(myLocalIntent != null) {
    int dt = myLocalIntent.getIntExtra("dt", -1); // -1 is an arbitrary default value
}

最后,你不需要创建一个新的Bundle来传递Intent中的值,看起来你只想传递position ...所以你可以大大缩短你的onItemClick()方法:

@Override
public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {
    Intent g = new Intent(books.this, SpecificBook.class);
    g.putInt("dt", position);
    books.this.startActivity(g);
}