2016-11-08 4 views
-3

Как только выполняется setOnClickListener, я хочу начать другое действие и передать ему переменную cn.getID(). Когда внутри другой деятельности я хочу, чтобы immidietaly начал метод 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); 
} 

Это метод внутри новой деятельности я хочу, чтобы выполнить 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); 
} 

EDIT: @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); 
} 

}

И это getIntent моей OnCreate Способ UI_MainActivity:

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

и в вашем onCreate() методом исходного Activity вы проверить его.

@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

Что-то не работает правильно. Вот как это понимается: «aim.putExtra» («findLocation», 1) »и« int i = getIntent(). GetIntExtra («findlocation», 999)! = 999; 'В последней строке Android Studio говорит мне: Несовместимые типы. Обязательный параметр: Int, Found: Boolean ". – Glave

+0

@Glave oooops, удалите проверку '! ='. Первоначально я собирался создать оператор if. –

+0

Итак, действие начинается сейчас, но что-то еще не так. Мой 'setOnClickListener' содержит этот код:' openMap (cn.getID()); ', но когда я нажимаю на кнопку, новое действие говорит мне, что' i' равно 999 (есть ли специальная причина для этого числа?) вместо 1 и не вызывает метод. Также. Я не могу видеть прямо сейчас, где мой идентификатор кнопки получен прямо сейчас в новом действии. Если i 'i == 1', это не может быть мой ID кнопки. – Glave

1

Шаг № 1: Используйте putExtra(), чтобы добавить ID значение в Intent, который вы используете с startActivity()

Шаг № 2: В другой деятельности, называют getIntent() в onCreate() для извлечения Intent, используемого для создания экземпляра операции. Вызовите get...Extra() (где ... зависит от типа данных), чтобы получить значение вашего идентификатора. Если значение ID существует, вызовите метод findLocation().

0

Это зависит от того, как вы хотите, чтобы он работал. Если вы хотите, чтобы он выполнялся только при создании активности (когда он запускается или поворачивается по экрану), вызовите метод в рамках действия onCreate. Если вы хотите, чтобы он вызывался всякий раз, когда пользователь возвращается к этому действию, которое может включать их, оставляя приложение и возвращаясь к нему через некоторое время, тогда onResume будет лучшим местом для него. Вызов метода из обоих должен работать, как вы надеетесь.

Я также рекомендую посмотреть жизненный цикл деятельности, так как это поможет вам в будущем.