Страница 11 из 14

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

Добавлено: 13 июл 2014, 18:03
Don77
allexan писал(а):Все делал по уроку:
..............................

Здесь ошибок нет.
В манифесте все прописано, однако

OnClickListener oclNum = new OnClickListener() {

public void onClick(View v) {
Intent intent = new Intent(this,ShowRes.class);

}
};
Intent intent = new Intent(this,ShowRes.class);
В первом параметре объекта Intent, вы указываете текущий объект (this) а это - oclNum, то есть первым параметром вы передаете обработчик нажатий, на самом деле надо указать текущий объект активити - ShowRes.this

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

Добавлено: 27 сен 2014, 21:27
isachenko
Подскажите пожалуйста, если я хочу, чтобы несколько кнопок одного активити1 вызывали одно и то же другое активити2, как это корректно прописать в onClick?
Спасибо!

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

Добавлено: 27 сен 2014, 23:05
Foenix
http://habrahabr.ru/post/114580/
обработку сделай как тут в самом первом примере. Соответственно в onCreate() дописывай несколько кнопок с обращением к одному методу.

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

Добавлено: 03 окт 2014, 10:22
Nialon
Привет всем. Уперся в **** реализацию Activity.
Как показать окно не используя интент? Ничего кроме startActivity не нашел.
Это нужно для сохранения данных внутри класса перед запуском.
Сюда входит запуск Activity из самого себя.
Естесствено Intent.extra ... put.. Парсе.. Сериализацию не предлагать. Это кошмар.

ВОт код для ясности:

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

.....
import android.app.Activity;
import java.util.Date;

public class AddEditRad extends Activity {

    interface ModeView {
        public int ALERT = 1;
        public int LAYOUT = 2;
    }

    // Приватные переменные этого класса
    private String LOG_TAG = "myLogs";
    private Context vContext;
    private DatabaseManager vDb;
    private mySCAdapter vAdapter;
    private Integer vMode;
    private Integer vRowID;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // ОДин сборщик рутового окна
        setContentView(BuildRoot(vContext, vDb, vAdapter, vRowID));
    }

    protected void Create(Context context, Integer Mode, DatabaseManager db, mySCAdapter Adapter, Integer rowID) {

        // Передаем все значения в приват класса
        vContext = context;
        vMode = Mode;
        vDb = db;
        vAdapter = Adapter;
        vRowID = rowID;

        switch (Mode) { // Смотрим тип запуска

            case ModeView.ALERT:

                AlertDialog.Builder ad = new AlertDialog.Builder(context);
                // ОДин сборщик рутового окна
                ad.setView(BuildRoot(context, db, Adapter, rowID));
                ad.show();

            break;

            case ModeView.LAYOUT:

               // ЗЕСЬ ТУПИК ... приватные данные зануляются
               // Эта зараза берет имя класса, а не текущий экземпляр
               startActivity(new Intent(this, AddEditRad.class));

            break;
        }

    }
Ну и извне запускаю так:

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

new AddEditRad().Create(this, 2, dm, scAdapter, -1); 
В алертах такой безобразии нет. ТАм можно расширять конструктор.
Может есть способ убрать бордюр т.е растянуть на все окно?

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

Добавлено: 03 окт 2014, 10:57
klblk
Nialon писал(а):Естесствено Intent.extra ... put.. Парсе.. Сериализацию не предлагать. Это кошмар.
Вот все из перечисленного нормально.
Nialon писал(а):Ну и извне запускаю так:

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

new AddEditRad().Create(this, 2, dm, scAdapter, -1); 
А вот это кошмар.

А теперь по порядку что нужно и зачем, из текста выше мало что уловилось (окна какие-то, бордюры). Для передачи данных в Activity используется Intent и это нормально и чем он вам не угодил совершенно не понятно.

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

Добавлено: 03 окт 2014, 13:31
Nialon
Что тут кошмарного. Отдельная процедура в классе для передачи параметров и далее.
Только вот запустить этот же активити изнутри класса не могу.. Это первый вопрос.

Основная Задача такая, запустить активити и передать, к примеру, следующее:
Context , DatabaseManager , SimpleCursorAdapter , 2 х Integer .. Ну и другое если приспичит.
Предложите рабочий вариант кода, я поменяю мнение. Не хочу думать над запаковкой\распаковкой данных.

Про бордюры забудьте .. Я поднял как минимум 3 разные темы...

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

Добавлено: 03 окт 2014, 14:01
klblk
Nialon писал(а):Что тут кошмарного. Отдельная процедура в классе для передачи параметров и далее.
Только вот запустить этот же активити изнутри класса не могу.. Это первый вопрос.

Основная Задача такая, запустить активити и передать, к примеру, следующее:
Context , DatabaseManager , SimpleCursorAdapter , 2 х Integer .. Ну и другое если приспичит.
Предложите рабочий вариант кода, я поменяю мнение. Не хочу думать над запаковкой\распаковкой данных.

Про бордюры забудьте .. Я поднял как минимум 3 разные темы...
Все Activity создаются системой самостоятельно, и "new Activity" в коде не имеет никакого логического объяснения.

0) Зачем вызывать Activity из самой себя?
1) передавать в Activity Context - зачем? Activity сама себе Context, ну а если нужно больше всегда есть getApplicationContext()
2) передавать в Activity DatabaseManager - зачем? что мешает создать новый?
3) передавать в Activity SimpleCursorAdapter - зачем? что мешает создать новый?
4) ну с Integer проблем быть не должно.

по п.2-3 могу ошибаться, т.к. серьезно с БД не работал, но вероятно есть какая-то архитектурная ошибка (вероятно нужно использовать какой-нить ContentProvider).

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

Добавлено: 03 окт 2014, 15:20
Nialon
Все данные еще в процессе сборки. Оптимизация тоже. Относится к 0, 1.
2, 3 - зачем создавать новое, когда есть активный текущий. У меня же не коллекция связей, а 1 экземпляр.
Это лишнее усложнение кода. В других языках можно было передать указатель и все. В джава его нет.
Если философия активити предполагает что она как отдельная программа (окно), которая запускается по интенту,
тогда выходит что в каждом новом окне 10 раз дублировать один и тот же код.. Это то что вы мне предложили.
Я тоже особо ничего не знаю про грамотную реализацию структуры, так что просто беру то что под рукой.
Если заниматься оптимизацией, то на данный момент выходит, мне нужно передать свой View в Activity.
Где-то вычитал о создании обертки вокруг Activity, чтобы не терять параметры, что-то никак не получается.

up: Пришлось немного почитать интенты. Пригодится. Закрываю вопрос.
Буду переписывать под модульность каждого в отдельности.

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

Добавлено: 23 ноя 2014, 16:07
akuz
А чем отличается запуск активити от просто если вызвать Layout файл, как я это сделал в 5 уроке. по нажатию кнопки на одном окне я вызвал другое окно методом setContentView(R.layout.screen2);

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

Добавлено: 23 ноя 2014, 17:36
doter.ua
akuz писал(а):А чем отличается запуск активити от просто если вызвать Layout файл, как я это сделал в 5 уроке. по нажатию кнопки на одном окне я вызвал другое окно методом setContentView(R.layout.screen2);
В разных лейаутах могут быть разные ID у элементов, и когда в коде Активити у тебя будет код где кнопка с ид = бтн1 все будет работать. При смене лейаута на другой, в котором кнопки с таким ИД вылетит ошибка. Вообще смена лейаутов реализована "фрагментами".

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

Добавлено: 14 дек 2014, 17:23
mixailanarxist
Такие вопросы появились:
1. А если элементов нужно больше, и они не влазят ни в горизонтальное расположение экрана, ни в вертикальное. Можно, конечно, перенести их на следующее Activity путем нажатия кнопки "Далее", но это не удобно. Как сделать, чтобы их можно было смотреть путем "листания", т.е. движением пальцев вверх-вниз (как обычно это и происходит в приложениях).
2. Как менять Activity не путем нажатия на кнопку, а путем движения пальца вправо-влево.

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

Добавлено: 14 дек 2014, 21:12
doter.ua
ScrollView как контейнер (например вместо LinearLayout или внутри него)

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

Добавлено: 15 дек 2014, 09:01
mixailanarxist
Спасибо, подсказали что есть такое дело как ViewPager в уроках. Будем разбираться.

Unfortunately, MyApp has stopped

Добавлено: 17 дек 2014, 20:42
Oyasi
Всем привет, помогите пожалуйста разобраться в следующей проблеме:
По данному уроку делал такую конструкцию "MainActivity" содержит текст, переключатель и кнопку. Кнопка должна открыть AddActivity, в которой только Hello_world. Выполнил всё как написано в уроке, но создал класс как советуют на сайте гугл в официальном туторе, через соответствующую функцию в Android Studio т.к. она создаёт сразу и Активити и лайаут и прописывает всё в Манифесте. не суть... Программа не запускается! вообще!
Методом тыка смог определить, что проблема в следующих строчках:
[syntax=java]
button = (Button) findViewById(R.id.button);
button.setOnClickListener(this);[/syntax]
AddActivity
[syntax=java]
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.MenuItem;


public class AddActivity extends ActionBarActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}[/syntax]
MainActivity
[syntax=java]
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;



public class MainActivity extends Activity implements View.OnClickListener {
Button button;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

button = (Button) findViewById(R.id.button);
button.setOnClickListener(this);
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
Intent intent = new Intent(this, AddActivity.class);
startActivity(intent);
break;
default:
break;
}
}
}[/syntax]
activity_add.xml
[syntax=java]<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.dima.studyj.AddActivity">

<TextView android:text="@string/hello_world" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>[/syntax]
activity_main.xml
[syntax=java]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
android:clickable="false">


<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Large Text"
android:id="@+id/textView"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />

<Switch
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Switch"
android:id="@+id/switch1"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>[/syntax]
AndroidManifest
[syntax=java]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.dima.studyj" >

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.example.dima.studyj.AddActivity"
android:label="@string/title_activity_add"
android:parentActivityName="com.example.dima.studyj.MainActivity">
<meta-data android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.dima.studyj.MainActivity" />
</activity>
</application>
</manifest>
[/syntax]

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

Добавлено: 17 дек 2014, 21:07
doter.ua
Создавай активити так: ПКМ на папке, в которой нужно создать, выбираешь new, затем blank activity

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

Добавлено: 17 дек 2014, 21:08
Oyasi
doter.ua писал(а):Создавай активити так: ПКМ на папке, в которой нужно создать, выбираешь new, затем blank activity
так и сделал, не помогло

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

Добавлено: 26 янв 2015, 16:05
gefest
Я видел в некоторых приложениях разные эффекты при смене activity. Подскажите, есть ли специальный параметр для этого?
Например, чтобы activity выезжало справа, а не появлялось из центра.

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

Добавлено: 26 янв 2015, 16:12
KamiSempai

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

Добавлено: 11 фев 2015, 02:21
Mango
Пишу в Android Studio. Создала Activity стандартным способом ...> new > blank Activity. В манифесте проверила все прописано.
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnSave:
saveText();
break;
Intent intent = new Intent(this, ActivityTwo.class);
startActivity(intent);
break;
default:
break;
}
}

Ругается на строку Intent intent = new Intent(this, ActivityTwo.class); (подчеркнута красным). Пишет unreachable statement. Сначала ругался на сам Intent, прописала вверху import android.content.Intent; появилась такая беда.
Подскажите пожалуйста, кто знает.

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

Добавлено: 11 фев 2015, 07:29
klblk
0) Оформляйте код на форуме правильно.
1) один break определенно лишний, либо не хватает еще одного case.