Как из списка вызвать второй активити?

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
do_cent
Сообщения: 15
Зарегистрирован: 08 фев 2012, 13:02

Re: Как из списка вызвать второй активити?

Сообщение do_cent » 11 апр 2012, 14:45

как тогда это реализовать?

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Как из списка вызвать второй активити?

Сообщение andev » 11 апр 2012, 15:02

Я ни в коем случае не попрекаю, лишь хочу предостеречь от ошибок.
Пожалуйста, опишите задачу в целом, возможно, будет предложен еще более простой и правильный подход.
Под задачей в целом я понимаю не проблему как перейти с каждого элемента на активити, а что то вроде: "мое приложение является сборником стихов. Каждая глава из списка открывается на экране и показывает картинку и стих. так же в моем приложении должны быть: 1 2 3 и тд"

do_cent
Сообщения: 15
Зарегистрирован: 08 фев 2012, 13:02

Re: Как из списка вызвать второй активити?

Сообщение do_cent » 11 апр 2012, 15:14

Создаю прозрачный список при нажатии на пункт открывается другая фотка и текст в виде стиха:):):):)простенькое приложение просто с кнопками я бы сделал по урокам а хочу с прозрачным списком:):):):)Так как я новичок и не знаю не java и не чего а по урокам я понял что можно создавать активити который в свою очередь открывает Лоут с текстом и картинкой самый простой способ:):):):)И поэтому спрашивал как привязать активити но вы говорите это нерационально и лучше использовать один активити и в нем сделать ссылки к лоут файлам Так вот как эти Лоут файлы привязать к списку:) или я не правильно понял? С кнопками понятно по уроку 10 я там прочел но не могу понять как это применить к списку:)

do_cent
Сообщения: 15
Зарегистрирован: 08 фев 2012, 13:02

Re: Как из списка вызвать второй активити?

Сообщение do_cent » 11 апр 2012, 15:32

"Методом научного тыка":):):)Я по эксперементировал так, но какие то глюки получаются :):):):):):)

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

package ru.doc.project;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ProbaActivity extends Activity {


  ListView lvMain;
 
  /** Called when the activity is first created. */
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    lvMain = (ListView) findViewById(R.id.lvMain);


    final ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
        this, R.array.names, android.R.layout.simple_list_item_1);
    lvMain.setAdapter(adapter);

    lvMain.setOnItemClickListener(new OnItemClickListener() {
      public void onItemClick(AdapterView<?> parent, View view,
          int position, long id) {
    	  String man = (String) adapter.getItem(position);
          if (man.equalsIgnoreCase("Федя")) {

           Intent myIntent = new Intent(getApplicationContext(), Pervstix.class);
           setContentView(R.layout.pervstix1);
                              startActivity(myIntent);      
    	  } 
          else if (man.equalsIgnoreCase("Петя")) {

          Intent myIntent = new Intent(getApplicationContext(), Pervstix.class);
              setContentView(R.layout.vtorstix2);
          startActivity(myIntent);  
          }
      }
    });

  }
  }
А во втором активити

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

package ru.doc.project;

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

public class Pervstix extends Activity {
	protected void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
	    setContentView(R.layout.pervstix1);
	}
	    protected void onCreate1(Bundle savedInstanceState) {
		    super.onCreate(savedInstanceState);
		    setContentView(R.layout.vtorstix2);
    }
}
	
Вроде получилось но нажимаешь на первый пункт выходит первый лоут, через 2 секунды он(первый лоут) опять как бы выходит, нажимаешь назад опять первый лоут нажимаешь ещё раз назад он выходит из приложения а в список не возвращается, нажимаешь на второй пункт он вызывает второй лоут потом через 2 секунды переходит на первый лоут а когда нажимаешь назад он переходит на второй лоут ещё раз, закрывается приложение:):):):):):):

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Как из списка вызвать второй активити?

Сообщение andev » 11 апр 2012, 17:25

я так понял у вас всего 2 активити будут
1-я с ListView перечисления всех названий, 2-я с содержимым и открываться будет когда выбрали любой из списков.
Я бы делал так - база данных в которой хранятся все необходимые данные в одной строке
id(порядковый номер, автоикремент), name (название, типа Вася, Петя), content (текст стиха), photo (к каждому стиху я так понял 1 своя фотка) Как это сделать читаете статью про SQLite и Cursor adapter/
на первом экране вы выводите только список, состоящий из NAME, на обработчик выбора пункта вешаете следующий код:
{
получить выбранный элемент
получить имя NAME выбранного элемента
создать Intent, нацеленный на второе активити
положить NAME с помощью putExtra в это активити
стартовать активити по интенту
}
На втором активити в конструкторе такой код
{
пытаетесь "достать" из пришедшего интента NAME
если удачно, то делаете запрос к базе данных с одним условием WHERE NAME равно тому. что вы достали
размещаете в фотку в ImageView, текст стиха в TextView
}

do_cent
Сообщения: 15
Зарегистрирован: 08 фев 2012, 13:02

Re: Как из списка вызвать второй активити?

Сообщение do_cent » 12 апр 2012, 10:28

Я хотел спросить а почему метод с несколькими активити, в моем случае не рационален? Там же получается что в оперативной памяти, один активити со списком переходит, во второй активити с лоутом больше не что память не ест, нажмешь только кнопку назад и переходишь в первый активити со списком, а тот получается отключается из опер. памяти, как там память не рационально используется? если только приложение из за этого больше весит. Но мне кажется вес приложения там не критичен тем более это не графика чтобы память сильно есть:) Или я где то ошибаюсь? Тем более я пишу под конкретное тело S5660 проц. 800 МГц опер память256 Мб:) И ещё вопрос как сделать чтобы название было по середине? вот стих начинается и у него название с больших букв тоже начинается слева:) Спасибо!
Последний раз редактировалось do_cent 12 апр 2012, 12:52, всего редактировалось 1 раз.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Как из списка вызвать второй активити?

Сообщение KamiSempai » 12 апр 2012, 12:20

Дело не в отъедании памяти, а в отъедании мозга программиста, который это все потом будет сопровождать или дорабатывать. И причина не именно в этой программе, а в манере программирования которая приедается и от нее потом трудно избавиться.
Вот один пример из личной практики:
Работал у нас в отделе один парень, и дали ему задание сделать печать прайс-листа в формате Excel. Но было там одно но, в зависимости от настроек перед печатью могли появиться 2 дополнительные колонки. И он ни чего лучше не смог придумать, как сделать 3 разных макета, которые отличались лишь отсутствием или наличием тех самых колонок. Ну ладно, это еще можно понять. Вместо программного удаления или добавления колонок, а также изменения размеров оставшихся, проще создать несколько макетов в которых все будет настроено и отрегулировано под отдельный случай. Все бы ни чего, только он под каждый макет отдельную программу написал!!! Зачем париться? Делов то - Ctrl+C и Ctrl+V плюс подкорректировать в некоторых местах. Затем ему стали давать задания по доделыванию этого прайс-листа. Естественно, в данном случае, для того, что бы что то поменять, нужно было делать одни и те же изменения в 3 местах!
Время шло, программа обрастала глюками и костылями. В итоге он уволился, а прайс-лист остался недоделанным и конечно же это "Богатство" перешло мне. В этот день я узнал еще одну причину из за которой можно ненавидеть человека.
После пары недель рефакторинга, а если быть точным, почти полного переписывания программы, код стал в 2 раза короче (с учетом написанных мной комментариев), а функционал программы увеличился.
И этот человек еще хвастался, что до нас работал в Москве и писал программное обеспечение для аппаратуры спутников ГЛОНАС, тех самых, что сейчас бороздят просторы водных глубин.

"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

do_cent
Сообщения: 15
Зарегистрирован: 08 фев 2012, 13:02

Re: Как из списка вызвать второй активити?

Сообщение do_cent » 13 апр 2012, 10:33

Ну тогда это не страшно я пишу её своей девушке это так практика для себя и только я её буду дорабатывать! Вот только единственное что в будущем я хотел бы писать грамотно:)Просто то что мне объяснил andev я не очень понял:):):):)

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Как из списка вызвать второй активити?

Сообщение KamiSempai » 13 апр 2012, 17:56

Вот пример того, как стоило сделать ваше приложение http://zalil.ru/33070188
В архиве есть apk, можно сразу установить и посмотреть как работает.
Массивы с названиями песен и с самими песнями хранятся в файле songs.xml. Размеры массивов одинаковы и порядковый номер названия песни соответствует порядковому номеру текста этой песни.
При выборе песни передается не только её название но и порядковый номер. Именно по нему ищется текст песни. Потом по этому же коду определяется какое изображение поставить на задний фон. Последней песни нет в операторе switch и для нее фон не меняется (и ошибка не возникает). Вы сами можете добавить новые песни, просто скорректировав songs.xml.
Если бы мне пришлось добавлять стих в вашу программу, мне следовало:
1) Добавить название стиха в массив с названиями стихов.
2) Добавить текст стиха.
3) Создать новую активити.
4) Создать для нее файл разметки.
5) Не забыть зарегистрировать эту активити в файле манифеста.
6) Добавить дополнительное условие в OnItemClickListener для открытия активити с добавленным стихом.

В моем случае хватит первых двух пунктов (+1 если нужно добавить картинку).

PS: Кстати, это моё первое опубликованное приложение для андроида. Я так волнуюсь :)
А сегодня еще пятница 13...
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

do_cent
Сообщения: 15
Зарегистрирован: 08 фев 2012, 13:02

Re: Как из списка вызвать второй активити?

Сообщение do_cent » 16 апр 2012, 10:47

Спасибо огромное я посмотрю и разберу:):):):)Так получается реально легче если что то надо добавить меньше движений я понял:):):) Кстати я протестил свое детище картинки хорошо показывает не растягивает это просто эмулятор растягивал а фотки я просто обрезал пропорцианально экрану под который делаю(под самсунг диагональ 3.2) :):):):) просто так протестил на HTC sensаtion вот там так растягивает не реально:):):):):):) Кстати очень удобно тестить свои приложения на разных телефонах в магазине где можно их потрогать :):):):)

do_cent
Сообщения: 15
Зарегистрирован: 08 фев 2012, 13:02

Re: Как из списка вызвать второй активити?

Сообщение do_cent » 17 апр 2012, 08:30

Блин отстой, когда перелистываешь список и задерживаешь палец на списке тогда картинка пропадает как бы выделяется все черным фоном это List View такой? И как то можно программно убрать это?Или нужно использовать другой список?

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Как из списка вызвать второй активити?

Сообщение KamiSempai » 17 апр 2012, 10:54

Свойству "Cache color hint" нужно установить значение "#00000000".
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

do_cent
Сообщения: 15
Зарегистрирован: 08 фев 2012, 13:02

Re: Как из списка вызвать второй активити?

Сообщение do_cent » 17 апр 2012, 12:24

Спасибо !!!!! Все ок!!!!

Ответить