2016-11-08 5 views
-3

setOnClickListenerが実行されるとすぐに、別のアクティビティを開始し、変数cn.getID()をそれに送信します。他のアクティビティの中で私はメソッドfindlocationをimmidietalyで開始し、cn.getID()を与えたいと思います。別のアクティビティを開始し、その中でメソッドを開始するにはどうすればよいですか?

方法findLocationはまだ完了していません。そのアイデアは、他のアクティビティボタンのIDを取得すると、自分のデータベース内のsqlliteで所属する場所を検索し、経度と緯度を取得して、mapcontrollerにこの時点で世界地図をフォーカスするように指示します。これが今の私のクラス全体で、一部編集した後 @Murat K.:

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

EDIT:

@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 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での方法:私のボタン-IDを受け取っている場合、私は私の以前のコメントに編集したよう

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

は、私が見る傾けます。最初は私のIDであると思っていましたが、ボタンIDは1からnまでのすべての番号にすることができるので、それはうまくいきません。

+0

あなたの 'openMap()'メソッドでは、あなたはインテントに何も入れていません。私の答えはそのまま使用しなければなりません。 –

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

EDIT:

//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

何かが正しく機能しません。 getIntExtra( "findlocation"、999)!= 999; '最後の行でAndroid Studioが教えてくれているのは" intent.putExtra( "findLocation"、1) 'と' int i = getIntent()互換性のない型。必須:Int、Found:Boolean "。 – Glave

+0

@Glave oooops、 '!='チェックを削除してください。私はもともとifステートメントを作成しようとしていました。 –

+0

さて、活動は今始まっていますが、まだ何かが正しいわけではありません。私の 'setOnClickListener'にはこのコードが含まれています: 'openMap(cn.getID());'、ボタンをクリックすると新しいアクティビティは 'i'が999です。 1の代わりにメソッドを呼び出しません。また、今私のボタンIDが新しいアクティビティで今受信されているのを見ることはできません。 i 'i == 1'ならば、自分のボタンIDにすることはできません。 – Glave

1

ステップ#1:あなたはstartActivity()

ステップ#2で使用IntentにあなたのID値を追加するためにputExtra()を使用します。他の活動では、getIntent()を呼び出しますonCreate()で、アクティビティインスタンスの作成に使用されたIntentを取得します。 get...Extra()...はデータタイプに依存します)を呼び出してID値を取得してください。 ID値が存在する場合は、findLocation()メソッドに電話してください。

0

どのように動作させるかによって異なります。アクティビティーの作成時(起動時または画面の回転時)にのみ実行したい場合は、アクティビティーonCreateメソッド内のメソッドを呼び出します。ユーザーがそのアクティビティに戻るときに呼び出す必要がある場合は、そのアプリケーションを終了し、いつか後で戻ってくる可能性があります。onResumeはそのためのより良い場所になります。いずれかからメソッドを呼び出すことも、あなたが望むように動作するはずです。

今後の活動に役立つように、アクティビティのライフサイクルを調べることもおすすめします。

関連する問題