如何启动另一个活动并在其中启动一个方法?

时间:2016-11-08 14:36:03

标签: java android android-intent osmdroid

setOnClickListener执行后,我想开始另一项活动,并将变量cn.getID()传送给它。在其他活动中,我想立即启动方法findlocation并向其提供cn.getID()

方法findLocation尚未完成。这个想法是,一旦它获得了其他活动的ID按钮,我就可以在我的数据库中使用sqllite搜索它所属的地方,获取经度和纬度并告诉mapcontroller关注世界地图这点。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.verladestellen);
    final DB_Verladestellen db = new DB_Verladestellen(this);
    List<DB_Place> placeList = db.getAllDBPlaces();
    final LinearLayout layout = (LinearLayout) findViewById(R.id.verladestellen_liste);

    for (final DB_Place cn : placeList) {

        final LinearLayout row = new LinearLayout(this);
        row.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));

        Button place = new Button(this);
        place.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

        place.setText(cn.getName());
        place.setId(cn.getID());
        row.addView(place);
        row.setId(cn.getID());

        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) place.getLayoutParams();
        params.weight = 1.0f;
        place.setLayoutParams(params);

        place.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Here I want to call the method to start the other activity 
                //and transmit cn.getID(). 
                openMap(null); 
            }
        });

        layout.addView(row);
    }
}

//The method to start the other activity
public void openMap(View view) {
    Intent intent = new Intent(this, UI_MainActivity.class);
    startActivity(intent);
}

这是我想要在启动后立即执行的新活动内部的方法:

public void findLocation(View view){
    MapView map = (MapView) findViewById(R.id.map);
    IMapController mapController = map.getController();
    mapController.setZoom(17);
    GeoPoint myLocation = new GeoPoint(PLACEHOLDER X  , PLACEHOLDER Y);
    mapController.animateTo(myLocation);
}

编辑: @Murat K.经过一些编辑,这是我全班同学:

public class UI_Verladestellen extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.verladestellen);
    final DB_Verladestellen db = new DB_Verladestellen(this);
    List<DB_Place> placeList = db.getAllDBPlaces();
    final LinearLayout layout = (LinearLayout) findViewById(R.id.verladestellen_liste);

    for (final DB_Place cn : placeList) {

        final LinearLayout row = new LinearLayout(this);
        row.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));

        Button place = new Button(this);
        place.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

        place.setText(cn.getName());
        place.setId(cn.getID());
        row.addView(place);
        row.setId(cn.getID());

        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) place.getLayoutParams();
        params.weight = 1.0f;
        place.setLayoutParams(params);

        place.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openMap(cn.getID());
            }
        });

        layout.addView(row);
    }
}

public void openMap(int view) {
    Intent intent = new Intent(UI_Verladestellen.this, UI_MainActivity.class);
    intent.putExtra("findLocation", 1);
    startActivity(intent);
}

}

这是我在UI_MainActivity中的onCreate方法的getIntent:

int i = getIntent().getIntExtra("findlocation", 999);
    if(i == 1){
        findLocation(i);
    }

当我编辑到我之前的评论中时,我无法看到我的Button-ID被收到的位置。起初我以为我会成为我的ID,但那不会起作用,因为Button ID可以是从1到n的每个数字。

3 个答案:

答案 0 :(得分:1)

您可以使用Intent例如

来实现此目的
 Intent i = new Intent(BaseActivity.this, YourSecondActivity.class);
 intent.putExtra("METHOD_TO_CALL", 1);
 startActivity(i);

并在您onCreate()的{​​{1}}方法中检查它。

Activity

编辑:

@Override
  public void onCreate(Bundle savedInstanceState) {
    int i = getIntent().getIntExtra("METHOD_TO_CALL", 999);
    if(i == 1){
      callMethod(i);
    }

答案 1 :(得分:1)

第1步:使用putExtra()将您的ID值添加到Intent

使用的startActivity()

步骤2:在其他活动中,在getIntent()中调用onCreate()以检索用于创建活动实例的Intent。致电get...Extra()(其中...取决于数据类型)以检索您的ID值。如果ID值存在,请调用findLocation()方法。

答案 2 :(得分:0)

这取决于您希望它如何工作。如果您只想在创建活动时(启动活动或屏幕旋转时)执行它,则在活动onCreate方法中调用该方法。如果你想在每次用户返回该活动时调用它,可以包括他们离开应用程序并在稍后返回它,那么onResume将是一个更好的选择。从任一方面调用方法应该按照您的希望工作。

我还建议查看活动生命周期,因为这将在未来为您提供很多帮助。