Урок 21. Создание и вызов Activity

Обсуждение уроков
Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Урок 21. Создание и вызов Activity

Сообщение anber » 08 авг 2013, 19:31

foomkin писал(а):Сделал все по уроку - получилось, добавил еще две активити вызываемые из мэинактивити, т.е. к активити ту добавил еще две.
В мэин активити прописал их как:
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnSams:
Intent intent = new Intent(this, SamsActivity.class);
startActivity(intent);

case R.id.btnHtc:
Intent intent2 = new Intent(this, HtcActivity.class);
startActivity(intent2);

case R.id.btnLg:
Intent intent3 = new Intent(this, LgActivity.class);
startActivity(intent3);

Все работает, только в приложении при переходе на них показывает неправильное содержимое их. Причем в одной, все 3 содержимых по очереди, в другой две, в третьей 1 и то не та. Что в коде не так? Подозреваю, что с интентами надо было поступать как то иначе чем просто обозвать их по разному
Не ясно в чем проблема.
Нажимаешь на кнопку, переход на другое активити происходит но что именно идет не так? Как должно быть?
И да, приведи код SamsActivity, HtcActivity и LgActivity
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

foomkin
Сообщения: 3
Зарегистрирован: 24 июл 2013, 13:50

Re: Урок 21. Создание и вызов Activity

Сообщение foomkin » 08 авг 2013, 20:29

Должно в каждом активити открываться свое окно с лист вью и текствью. А там в самс лджи открывается, в элджи все все три по очереди при нажимании кнопки бэк, в хтц две.
Вот тест каждой из этих активити:

package ru.foomkin.mobcat;

import android.app.Activity;
import android.os.Bundle;

public class HtcActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.htc);
}
}
Остальные такие же

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Урок 21. Создание и вызов Activity

Сообщение anber » 09 авг 2013, 12:27

foomkin писал(а):Должно в каждом активити открываться свое окно с лист вью и текствью. А там в самс лджи открывается, в элджи все все три по очереди при нажимании кнопки бэк, в хтц две.
Вот тест каждой из этих активити:

package ru.foomkin.mobcat;

import android.app.Activity;
import android.os.Bundle;

public class HtcActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.htc);
}
}
Остальные такие же
Почитай внимательно про оператор switch. В частности обрати внимание на слово break
http://developer.alexanderklimov.ru/and ... switch.php
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

foomkin
Сообщения: 3
Зарегистрирован: 24 июл 2013, 13:50

Re: Урок 21. Создание и вызов Activity

Сообщение foomkin » 11 авг 2013, 15:32

Спасибо большое, помогло.

once2go
Сообщения: 8
Зарегистрирован: 01 май 2013, 20:29

Re: Урок 21. Создание и вызов Activity

Сообщение once2go » 13 авг 2013, 13:28

помогите решить!
В общем такая ситуация
В методе онклик вызываю
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
стартАктивити(интент);
this.finish();
все бі ничего но при переходе на вторую активность со своим лейаутом софтина как вылетает на секунду(происходит такой себе неловкий переход с отображением рабочего стола)
Можно ли сделать какой то дилей или закрывать первую активность с другой(примеры со стак овера почему то не работаюТ =( )

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 21. Создание и вызов Activity

Сообщение Mikhail_dev » 13 авг 2013, 14:31

Попробуй флаг дать активности в манифесте
android:noHistory="true"

once2go
Сообщения: 8
Зарегистрирован: 01 май 2013, 20:29

Re: Урок 21. Создание и вызов Activity

Сообщение once2go » 13 авг 2013, 15:01

no-- писал(а):Попробуй флаг дать активности в манифесте
android:noHistory="true"
не помогло((

once2go
Сообщения: 8
Зарегистрирован: 01 май 2013, 20:29

Re: Урок 21. Создание и вызов Activity

Сообщение once2go » 13 авг 2013, 15:40

no-- писал(а):Попробуй флаг дать активности в манифесте
android:noHistory="true"
что характерно что баг этот вылетает при срабатывании метода finish при чем не важно в какой активности он был и для какого класса применялся...
к примеру запустилась первая активность. в коде третей активности вызвал метод финиш для первой активности (вылет) при этом при вызове второй активности с первой для первой делал
doPause();
doStop();
doDestroy();
при этом задержка между переходами стала короче(но не исчезла =( )

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Урок 21. Создание и вызов Activity

Сообщение anber » 13 авг 2013, 15:43

once2go писал(а):
no-- писал(а):Попробуй флаг дать активности в манифесте
android:noHistory="true"
не помогло((
При этом this.finish(); убери
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

once2go
Сообщения: 8
Зарегистрирован: 01 май 2013, 20:29

Re: Урок 21. Создание и вызов Activity

Сообщение once2go » 13 авг 2013, 16:47

Всем кто помог +1 к счастью)

Спасибо )) Реально помогло....не знаю что бы я без вас делал)))
При чем эту проблуму пытался побороть уже давно((

Ptenchik
Сообщения: 1
Зарегистрирован: 24 авг 2013, 17:11

Re: Урок 21. Создание и вызов Activity

Сообщение Ptenchik » 24 авг 2013, 18:07

А можно теоретический вопрос:
А вот если я к примеру делаю интерактивную детскую сказку,со всякими движущимися/пищащими элементами, страниц эдак в 50. То это получается мне надо делать 50 activity.java, 50 xml страниц, добавлять все 50 активити в манифест? Или я чего-то не догоняю?
А если к примеру бекграунд одинаковый и менять только интеракт. элементы, все равно делать 50xml, и только одинаковый бекграунд из ресурсов везде подставлять?
Если юзать ImageSwitcher, там только одну картинку вроде можно вставить и менять, а у меня везде разное кол-во элементов.
Короче: если у меня 50 разных страниц(картинок), то делать 50xmlов?
И можно ли как-то только элементы и их кол-во менять?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 21. Создание и вызов Activity

Сообщение Foenix » 24 авг 2013, 22:53

да ты что, менять.. запутаешься ты в них, поди
Скорее всего, для сказки подойдет компонент вьюпейджер, но и там придется делать xml фрагментов.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
mozilalvfg
Сообщения: 85
Зарегистрирован: 10 авг 2013, 18:46

Re: Урок 21. Создание и вызов Activity

Сообщение mozilalvfg » 26 авг 2013, 17:33

Делал по уроку всё хорошо. Попробовал добавить 3 activity и изменил 2 activity как в 1 activity, поменял даные под 2 activity. Eclips показывает ошибку в коде "btnActFree.setOnClickListener(this);"
вод код 2 activity, в манифест всё добавил. В чем моя ошибка?

Код: Выделить всё

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


public class ActivityTwo extends Activity {
	  Button btnActFree;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.two);
   
  btnActFree = (Button) findViewById(R.id.btnActFree);
  btnActFree.setOnClickListener(this);
}
		

  public void onClick(View v) {
    switch (v.getId()) {
    case R.id.btnActTwo:
        Intent intent = new Intent(this, Activityfree.class);
        startActivity(intent);
      break;
      
    case R.id.btnActFree:

      break;    
      
    default:
      break;
    }
  }
 
}
two.xml

Код: Выделить всё

<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">
<Button
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="Go to Activity Free"
 android:id="@+id/btnActFree">
</Button>
</LinearLayout>
Из средств, расширяющих сознание, я признаю только книги и немного пива!
____________________________________________________________________
IntelliJ IDEA 12. Win 7 x64 sp1
KSWEB: сервер + PHP + MySQL FREE
Изображение

Аватара пользователя
mozilalvfg
Сообщения: 85
Зарегистрирован: 10 авг 2013, 18:46

Re: Урок 21. Создание и вызов Activity

Сообщение mozilalvfg » 26 авг 2013, 17:45

а при таком коде

Код: Выделить всё

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;


public class ActivityTwo extends Activity {
	  Button btnActFree;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.two);
   
  btnActFree = (Button) findViewById(R.id.btnActFree);

}
		

  public void onClickbtnActFree() {
    
        Intent intent = new Intent(this, Activityfree.class);
        startActivity(intent);
     
    }
  }

выводит такую ошибку

Код: Выделить всё

 Shutting down VM
threadid=1: thread exiting with uncaught exception (group=0xb60324f0)
 FATAL EXCEPTION: main java.lang.IllegalStateException: Could not find a method onClickbtnActFree(View) in the activity class com.example.p0211_twoactivity.ActivityTwo for onClick handler on view class android.widget.Button with id 'btnActFree'
 	at android.view.View$1.onClick(View.java:2131)
 	at android.view.View.performClick(View.java:2485)
	at android.view.View$PerformClick.run(View.java:9080)
 	at android.os.Handler.handleCallback(Handler.java:587)
	at android.os.Handler.dispatchMessage(Handler.java:92)
	at android.os.Looper.loop(Looper.java:130)
 	at android.app.ActivityThread.main(ActivityThread.java:3683)
	at java.lang.reflect.Method.invokeNative(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:507)
	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
	at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NoSuchMethodException: onClickbtnActFree
 	at java.lang.ClassCache.findMethodByName(ClassCache.java:247)
	at java.lang.Class.getMethod(Class.java:962)
	at android.view.View$1.onClick(View.java:2124)
 	... 11 more
Из средств, расширяющих сознание, я признаю только книги и немного пива!
____________________________________________________________________
IntelliJ IDEA 12. Win 7 x64 sp1
KSWEB: сервер + PHP + MySQL FREE
Изображение

9bagel
Сообщения: 18
Зарегистрирован: 16 июн 2013, 11:18

Re: Урок 21. Создание и вызов Activity

Сообщение 9bagel » 26 авг 2013, 17:48

mozilalvfg писал(а):а при таком коде

Код: Выделить всё

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;


public class ActivityTwo extends Activity {
	  Button btnActFree;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.two);
   
  btnActFree = (Button) findViewById(R.id.btnActFree);

}
		

  public void onClickbtnActFree() {
    
        Intent intent = new Intent(this, Activityfree.class);
        startActivity(intent);
     
    }
  }

выводит такую ошибку

Код: Выделить всё

 Shutting down VM
threadid=1: thread exiting with uncaught exception (group=0xb60324f0)
 FATAL EXCEPTION: main java.lang.IllegalStateException: Could not find a method onClickbtnActFree(View) in the activity class com.example.p0211_twoactivity.ActivityTwo for onClick handler on view class android.widget.Button with id 'btnActFree'
 	at android.view.View$1.onClick(View.java:2131)
 	at android.view.View.performClick(View.java:2485)
	at android.view.View$PerformClick.run(View.java:9080)
 	at android.os.Handler.handleCallback(Handler.java:587)
	at android.os.Handler.dispatchMessage(Handler.java:92)
	at android.os.Looper.loop(Looper.java:130)
 	at android.app.ActivityThread.main(ActivityThread.java:3683)
	at java.lang.reflect.Method.invokeNative(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:507)
	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
	at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NoSuchMethodException: onClickbtnActFree
 	at java.lang.ClassCache.findMethodByName(ClassCache.java:247)
	at java.lang.Class.getMethod(Class.java:962)
	at android.view.View$1.onClick(View.java:2124)
 	... 11 more
Вы забыли указать activity в качестве обработчика:
Вместо public class ActivityTwo extends Activity
Напишите public class ActivityTwo extends Activity implements OnClickListener

А во втором случае забыли добавить в параметр OnClick вьюшки onClickbtnActFree

Аватара пользователя
mozilalvfg
Сообщения: 85
Зарегистрирован: 10 авг 2013, 18:46

Re: Урок 21. Создание и вызов Activity

Сообщение mozilalvfg » 26 авг 2013, 18:07

9bagel писал(а):
mozilalvfg писал(а):а при таком коде

Код: Выделить всё

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;


public class ActivityTwo extends Activity {
	  Button btnActFree;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.two);
   
  btnActFree = (Button) findViewById(R.id.btnActFree);

}
		

  public void onClickbtnActFree() {
    
        Intent intent = new Intent(this, Activityfree.class);
        startActivity(intent);
     
    }
  }

выводит такую ошибку

Код: Выделить всё

 Shutting down VM
threadid=1: thread exiting with uncaught exception (group=0xb60324f0)
 FATAL EXCEPTION: main java.lang.IllegalStateException: Could not find a method onClickbtnActFree(View) in the activity class com.example.p0211_twoactivity.ActivityTwo for onClick handler on view class android.widget.Button with id 'btnActFree'
 	at android.view.View$1.onClick(View.java:2131)
 	at android.view.View.performClick(View.java:2485)
	at android.view.View$PerformClick.run(View.java:9080)
 	at android.os.Handler.handleCallback(Handler.java:587)
	at android.os.Handler.dispatchMessage(Handler.java:92)
	at android.os.Looper.loop(Looper.java:130)
 	at android.app.ActivityThread.main(ActivityThread.java:3683)
	at java.lang.reflect.Method.invokeNative(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:507)
	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
	at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NoSuchMethodException: onClickbtnActFree
 	at java.lang.ClassCache.findMethodByName(ClassCache.java:247)
	at java.lang.Class.getMethod(Class.java:962)
	at android.view.View$1.onClick(View.java:2124)
 	... 11 more
Вы забыли указать activity в качестве обработчика:
Вместо public class ActivityTwo extends Activity
Напишите public class ActivityTwo extends Activity implements OnClickListener

А во втором случае забыли добавить в параметр OnClick вьюшки onClickbtnActFree
во втором варианте я добавил но всёрвано выдаёт туже ошибку

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">

<Button
    android:id="@+id/btnActFree"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="onClickbtnActFree"
    android:text="Go to Activity Free" >

</Button>
</LinearLayout>
Из средств, расширяющих сознание, я признаю только книги и немного пива!
____________________________________________________________________
IntelliJ IDEA 12. Win 7 x64 sp1
KSWEB: сервер + PHP + MySQL FREE
Изображение

hard
Сообщения: 44
Зарегистрирован: 13 сен 2013, 14:21

Re: Урок 21. Создание и вызов Activity

Сообщение hard » 13 сен 2013, 14:35

Заранее извиняюсь не знал в какую тему написать. Нужен совет вот в каком вопросе:
Допустим имеется большое приложение и в файле MainActivity очень много кода, который усложняет чтение и понимание программы. Для упрощения создаю вспомогательный класс в который передаю MainActivity и в котором реализую нужные мне методы которые так же взаимодействуют с View(к примеру установка адаптера в listView act.listview.setAdapter(adapter)). Не приведет ли такой подход к проблемам и ошибкам?

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 21. Создание и вызов Activity

Сообщение Mikhail_dev » 13 сен 2013, 15:24

Вообще не должно привести. Принцип "разделяй и властвуй" никто не отменял. Делите на сущности, так сказать по смыслу код. Работа с настройками? Хорошо, сделаем (статический класс||синглтон) для работы с настройками. Менеджер для работы с интернетом? В отдельный класс.
Естественно что так лучше. НО!!! Вы должны помнить, что бывают такие вещи, как утечки. Если передаёте активность по коду, то НЕ ИСПОЛЬЗУЙТЕ ЕЁ КОНТЕКСТ! Возьмите контекст самого приложения посредством Activity.getApplicationContext. Просто если к примеру объект будет синглтоном и в синглтоне будет ссылка на какую-либо активность, то эта активность может висеть в памяти во время, когда не должна. Также в Toast не рекомендуется использовать контекст активности.

hard
Сообщения: 44
Зарегистрирован: 13 сен 2013, 14:21

Re: Урок 21. Создание и вызов Activity

Сообщение hard » 13 сен 2013, 15:45

спасибо большое за ответ.
Но я же не контекст передаю а активити для доступа к переменым и методам.

На счет контекста уже не раз слышу но не совсем еще понял. Суть в том что бы где это возможно использовать что то вроде:

Код: Выделить всё

public class ApplicationContext extends Application {

	private static Context context;

	public void onCreate() {
		super.onCreate();
		ApplicationContext.context = getApplicationContext();
	}

	public static Context getAppContext() {
		return ApplicationContext.context;
	}

}
И еще вопрос если позволите. В чем минусы использования вот этого кода для блокировки пересоздания активити при повороте экрана

Код: Выделить всё

android:configChanges="keyboardHidden|orientation|screenSize"

Просто у меня очень много диалогов и отслеживать всех их...ну не получается

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 21. Создание и вызов Activity

Сообщение Mikhail_dev » 13 сен 2013, 18:43

На счет кода, всё верно. Я лично так и делаю, также получаю контекст приложения.
И еще вопрос если позволите. В чем минусы использования вот этого кода для блокировки пересоздания активити при повороте экрана
В общем минусы, на сколько помню в том, что если что-то делать в асинхронном запросе, то можно получить проблемы при поворотах. Я пару месяцев назад читал статейку на зарубежном сайте, там как раз эта тема обсуждалась. Сами АндроидоРазрабы не рекомендут использовать android:configChanges="keyboardHidden|orientation|screenSize"
Просто у меня очень много диалогов и отслеживать всех их...ну не получается
Диалогов каких? AlertDialog? FragmentDialog?

Ответить