2016-11-08 249 views
-3

只要执行setOnClickListener我想开始另一个活动并将变量cn.getID()传送给它。当在其他活动中我想immidietaly启动方法findlocation并给它。如何启动另一个活动并在其中启动一个方法?

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

这是新的活动我想immidietaly执行里面的方法,它已开始之后:

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

}

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

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

当我编辑到我以前的评论,我不能看到我的按钮ID收到的地方。起初我以为我会是我的ID,但那不起作用,因为按钮ID可以是从1到n的每个数字。

+0

在你的'openMap()'方法中,你没有把任何东西放入Intent中。您必须完全按照原样使用我的答案。 –

+0

@MuratK。我以为我的确很好地回答了你的答案。也许我误解了你。那么你能告诉我我错过了什么吗?对不起,我不是很有经验。 – Glave

回答

1

您可以通过例如Intent来实现此目的。

Intent i = new Intent(BaseActivity.this, YourSecondActivity.class); 
intent.putExtra("METHOD_TO_CALL", 1); 
startActivity(i); 

,并在您开始Activity你检查它的onCreate()方法。

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

编辑:

//The method to start the other activity 
public void openMap(View view) { 
    Intent intent = new Intent(this, UI_MainActivity.class); 
    intent.putExtra("METHOD_TO_CALL", 1); // the 1 is a example, put your ID here 
    startActivity(intent); 
} 
+0

某些东西不能正常工作。这是如何理解它:''intent.putExtra(“findLocation”,1)'和'int i = getIntent()。getIntExtra(“findlocation”,999)!= 999;'在Android Studio告诉我的最后一行“不兼容的类型。Required:Int,Found:Boolean“。 – Glave

+0

@Glave oooops,删除'!='检查。我原本打算创建一个if语句。 –

+0

好吧,活动现在开始了,但还是不对。我的'setOnClickListener'现在包含这个代码:'openMap(cn.getID());',但是当我点击按钮时,新的活动告诉我'i'是999(这个数字有特殊原因吗?)而不是1,并且不调用该方法。也。我现在看不到,现在我的按钮ID在新的活动中被收到。如果我'我== 1'它不能是我的按钮ID。 – Glave

1

第1步:使用putExtra()到您的ID添加到您startActivity()

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

0

这取决于你希望如何工作。如果您只希望在创建活动时(启动时或屏幕旋转时)执行它,请在方法onCreate活动内调用该方法。如果您希望每当用户返回到可以包括他们离开应用程序并返回该应用程序的活动时调用此应用程序,那么onResume将是更好的选择。从任何一方调用该方法都应该如你所希望的那样工作。

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

相关问题