Страница 3 из 6

Re: Урок 28. Extras - передаем данные с помощью Intent

Добавлено: 14 окт 2013, 15:49
Foenix
Ничего этого делать не нужно, это все равно что гадать на кофейной гуще. Вначале нужно перенестись в ту строку, где ошибка, и посмотреть на нее. Иначе, зачем тогда логи??

Re: Урок 28. Extras - передаем данные с помощью Intent

Добавлено: 14 окт 2013, 16:09
Mike
Foenix Вы мне всегда интуитивно нравились :D Чес.слово - кликал. ...но видимо недостаточно уверенно - ничего не открывалось ... Но после Ваших слов открылось ... В общем там было "dbHelper.close();", которого у меня уже нет .. . Я их чистил, но этот как-то просочился ... Теперь все работает :).

Re: Урок 28. Extras - передаем данные с помощью Intent

Добавлено: 14 окт 2013, 16:31
Foenix
ну магия :) да, способности есть у меня :-D

Насчет "кликал" не открылось. Кликай всегда на ту строку, где показан адрес в ТВОЕЙ программе, и ПОСЛЕ строчки Caused by .. (что значит "по причине").

Re: Урок 28. Extras - передаем данные с помощью Intent

Добавлено: 14 окт 2013, 16:46
Mike
Похоже. Сегодня с утра я услышал Ваш голос в вебинаре, и первое на что обратил внимание, что он очень похож на тот, который представлялся, когда я читал Ваши реплики на форуме. Это не нормально :) (изв-те за оффтоп)

Re: Урок 28. Extras - передаем данные с помощью Intent

Добавлено: 14 окт 2013, 16:56
Foenix
голос ужасный :( я послушала в записи только начало и не стала продолжать даже. Слышала, что у многих такое..
Спасибо большое, что посмотрел вебинар, буду рада вопросам если что. Ко мне можно на ты обращаться.

Re: Урок 28. Extras - передаем данные с помощью Intent

Добавлено: 14 окт 2013, 17:04
Mike
Спасибо. Не премину :)

Re: Урок 28. Extras - передаем данные с помощью Intent

Добавлено: 19 окт 2013, 23:31
Mike
Есть справочник, в котором имеется ссылочное поле на другие элементы этого же справочника, которые трактуются, как родительские элементы элементов, которые содержат такие ссылки. Т.е., имеется многоуровневый иерархический справочник. MainActivity обеспечивает отображение списка и безнес-логику данного справочника. Список справочника (ListView+SimpleCursorAdapter) представляет из себя линейный список, отображающий элементы одного родителя. Абсолютно идентично отображению содержания одного каталога в любом файл-менеджере. Точно также, как в ф.-менеджере должна осуществляться и навигация по уровням справочника (без привлечения treeview): дабл-клик по элементу должен "открывать" этот элемент, как каталог, и в новом списке должны отображаться его дочерние элементы.
Попытался реализовать эту функцию с помощью рекурсивного вызова MainActivity, передавая ей через интент новый ID для формирования нового курсора. Но у меня ничего не вышло. Ошибок не возникает, в дебаге проследил, что вплоть до инициации "новой" Activity ("startActivity(intent);") все переменные получают ожидаемые значения, но после завершения метода вызова Activity посредством интента (на этом этапе в дебаге происходит что-то мне совсем неведомое и я ничего не могу об этом рассказать), программа просто возвращается к следующей строке кода в MainActivity. Список на дисплее, в котором я кликал по элементу, передергивается и остается неизменным.
Я не спрашиваю, что я сделал неправильно, потому что я и не знаю, как это делать и можно ли так делать, - метод тыка не прокатил ... Не мог бы кто-н подсказать, как надо делать?
PS Забыл сказать, что в других местах, например при вызове экрана создания нового элемента, а потом при вызове списка при сохранении этого элемента, или отмены создания элемента, интенты исправно отрабатывают.

Re: Урок 28. Extras - передаем данные с помощью Intent

Добавлено: 20 окт 2013, 00:19
Foenix
Как "надо" делать тут будет у каждого свой. Я бы такое делала через фрагменты, добавляя сверху созданный новый фрагмент. В общем, это продумать нужно. А вот рекурсивный вызов ( и тем более главной активити!) мне кажется сомнительным занятием..

Re: Урок 28. Extras - передаем данные с помощью Intent

Добавлено: 20 окт 2013, 01:07
Mike
Доброй ночи. Не ожидал сегодня получить ответ. В общем, во-первых, увы, я не знаю, что такое "фрагмент", во-вторых, не понимаю, что такое добавить его сверху (и зачем?). В-третьих, кажется ты не поняла, что мне надо сделать.

MainActivity у меня изначально только тем и занимается, что строит список по указанному ID родителя и обрабатывает события в этом экране. Естественно, что программа начинается с этого списка (с ID_родителя = 0). Ясно, что весь этот функционал должен быть закодирован только в одном куске (экземпляре) кода. У меня таким куском пока является MainActivity. Она же обрабатывает смену родительского ID. А после этого ничего не остается, как только сформировать новый список. Но это тоже ее функция ... То есть, нет сомнений, что самым естественным решением тут была бы рекурсия. Но вот как это реализовать технически (и тянет ли это Java) - я не знаю :( ...
Отвечать прямо сейчас не обязательно, поздно уже очень (или может ты располагаешься значительно западнее...)?).

Re: Урок 28. Extras - передаем данные с помощью Intent

Добавлено: 20 окт 2013, 09:14
Foenix
Mike писал(а):Доброй ночи. Не ожидал сегодня получить ответ. В общем, во-первых, увы, я не знаю, что такое "фрагмент", во-вторых, не понимаю, что такое добавить его сверху (и зачем?). В-третьих, кажется ты не поняла, что мне надо сделать.
Я все поняла прекрасно, или ты так объясняешь. Ответ звучит не очень - "не знаю что такое фрагменты и знать не хочу". А ты посмотри, урок по фрагментам имеется. При их использовании будет создан 1 экземпляр MainActivity, как ты, вроде бы, этого и хотел, а не плодиться неизвестно сколько рекурсивно вызванных активити. Даже не представляю как это. Ты уже не первый тут с горячим желанием организовать непременно рекурсию :-D у меня прям дежавю.
Кстати, "дабл-клик" это тоже для андроида не совсем верно :o

Re: Урок 28. Extras - передаем данные с помощью Intent

Добавлено: 20 окт 2013, 19:23
Mike
Не в том дело, что "... и знать не хочу". Просто слово "фрагмент" я до сих пор воспринимал сугубо как "часть чего-то", а дальше 54-го (кажется) урока, еще не заглядывал и не знал, что и к этому Гугл приложил свою руку. Но теперь заглянул. Окончательные выводы делать рано, но первое впечатление, - очередной костыль типа "setBackground() есть, а getBackground() - нету"(?!). (До версии Android 1.5 (кажется) достать его (бэкграунд) можно было только через "Владивосток", а после, - только через "Хабаровск", но просто по человечески getBackground() как не было так и нет ...)).
Но самое главное, что моя основная версия пока - 2.3.3 ( у меня телефон такой), а Fragment, как я понял, работает только с 3.0 ((( ..., - т.е., не катит (и я не виноват!) ... Но ведь жили как-то без этого ...

Я все еще надеюсь, что мой интент не сработал не по причине какого-то принципиального технического препятствия, а в результате банальной программистской ошибки/недочета, связанных с крайней убогостью моей квалификации. На этот случай выкладываю фрагмент кода в котором вызывается метод newLayer(id), из которого вызывается интент и описание метода. Такого рода ошибки опознаются профи с одного взгляда:

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

public class MainActivity extends Activity implements OnClickListener {
     .........
     protected void onCreate(Bundle savedInstanceState) {
           .........
	//Формирую список по входящим параметрам
	// получаю из Intent текущее МХ и объект
	Intent intent = getIntent();
	if (intent.hasExtra("selectedItemId") != false){
		intCurStorPlaceId = intent.getIntExtra("intCurStorPlaceId", 0);
		int selectedItemId = intent.getIntExtra("selectedItemId", 0);
		fullPathStorPlace = intent.getStringExtra("fullPathStorPlace");	
	} else {
		fullPathStorPlace = "Начальные Места хранения";
	}

        ..........

        lvMain.setOnItemClickListener(new OnItemClickListener(){
                public void onItemClick(AdapterView<?> parent, View view,
		        int position, long id) {
				if (viewOld != null) {

					viewOld.setBackgroundColor(intBackgroundColor);
					Log.d(LOG_TAG, "viewOld: position = " + position + ", id = "
						       + id);
					if (viewOldPosition == position) {
						//т.е., дабл-клик
						newLayer(id);
					}
				};
					
				view.setBackgroundColor(Color.LTGRAY);				
				Log.d(LOG_TAG, "itemClick: position = " + position + ", id = "
				    + id);
				viewOld = view;	
				viewOldPosition = position;
			}
                 }
           )
     }

     public void newLayer(long idCurItem) {
       
	//вычисляются переменные	для подстановки в интент
        .................
        
-- Я додумался и безрезультатно пытался здесь заранее создать какой-то новый экземпляр MainActivity, но не рискну показывать, как я это делал (потому как без понятия, как это делается, а аналогов не нашел ...). Но обращаю внимание, что это как-то перекликается с твоим советом использовать фрагменты, хотя я тогда о них ничего не знал! Так может быть в этом и дело - просто грамотно создать этот экземпляр и подставить его вместо "MainActivity.class"? Вдруг получится :)? А если получится, то потом можно будет подумать и о том, как убить предыдущую, если она сама не захочет уйти. Напиши мне, плз, эту строчечку, и я попробую. (как программист удовлетворительно знаю только два метода: 1. copy-paste и 2. метод "тыка" (((, - но я не программист и не претендую ...): 

	Intent intent = new Intent(this, MainActivity.class);
	intent.putExtra("intCurStorPlaceId", intCurStorPlaceId);
	intent.putExtra("fullPathStorPlace", fullPathStorPlace);
	intent.putExtra("key", "wClick");
	Log.d(LOG_TAG, "M1 intent");      //до этого места все тип-топ
	startActivity(intent);		
     };
}

Re: Урок 28. Extras - передаем данные с помощью Intent

Добавлено: 20 окт 2013, 20:05
Foenix
support library есть, поэтому юзаются везде. А выводы ты про них рано сделал)

Re: Урок 28. Extras - передаем данные с помощью Intent

Добавлено: 20 окт 2013, 20:11
Foenix
как убить предыдущую, если она сама не захочет уйти.
вот те строчки что там написаны, целый абзац, это просто ай-ай-ай и безобразие..
люди, ну скажите же, что тут нужны фрагменты.. это ведь как раз тот самый случай..

Re: Урок 28. Extras - передаем данные с помощью Intent

Добавлено: 21 окт 2013, 13:07
Mike
ладно-ладно, пойду разбираться с фрагментами. Но хочу заметить, что при смене ориентации MainActivity спокойно перегружается и это никого не приводит в ужас ... Несправедливо...

Re: Урок 28. Extras - передаем данные с помощью Intent

Добавлено: 09 ноя 2013, 20:12
Nik
Люди помогите. не могу вкурить почему приложение останавливается... пытаюсь передать число из одной активити в другую.

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

x = x + 1;
			Intent intent = new Intent(this, Result.class);
			intent.putExtra("x", x);
			startActivity(intent);
принимаю вот

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

Intent intent = getIntent();
	    
	    int x = intent.getIntExtra("x", 0);
		tv = (EditText)findViewById(R.id.tv);
		tv.setText(x);
почему приложение останавливается и х не передается?

Re: Урок 28. Extras - передаем данные с помощью Intent

Добавлено: 09 ноя 2013, 22:47
Foenix
экстрасенсов тут нету. Ты лог смотрел?

Re: Урок 28. Extras - передаем данные с помощью Intent

Добавлено: 10 ноя 2013, 09:04
Nik
Foenix писал(а):экстрасенсов тут нету. Ты лог смотрел?
ну пока этой строчки не было все работает. может быть я не правильно передаю значение переменной? объясните как правильно передать переменную из активити main в активити resultat.

Re: Урок 28. Extras - передаем данные с помощью Intent

Добавлено: 10 ноя 2013, 09:19
Foenix
в логе все написано.

Re: Урок 28. Extras - передаем данные с помощью Intent

Добавлено: 10 ноя 2013, 10:31
Nik
Foenix писал(а):в логе все написано.
не знаю как правильно прикреплять лог ... https://drive.google.com/file/d/0BxZRVO ... sp=sharing вот он на ссылке будет, можно?
PS научите прикреплять логи)


сам код такой

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

public class MainActivity extends Activity implements OnClickListener {
int x = 0;
	Button btn1;
	Button btn2;
	Button btn3;
	Button btn4;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		btn1 = (Button) findViewById(R.id.btn1);
		btn2 = (Button) findViewById(R.id.btn2);
		btn3 = (Button) findViewById(R.id.btn3);
		btn4 = (Button) findViewById(R.id.btn4);
		
		
		btn1.setOnClickListener(this);
		btn2.setOnClickListener(this);
		btn3.setOnClickListener(this);
		btn4.setOnClickListener(this);
		
	}
	
	
	
	public void onClick(View v) {
		
		switch (v.getId()){
		case R.id.btn1:
			Toast.makeText(this, "Верно", Toast.LENGTH_LONG).show();
			x = x + 1;
			Intent intent = new Intent(this, Result.class);
			intent.putExtra("x", x);
			startActivity(intent);
			break;
		case R.id.btn2:
			Toast.makeText(this, "Не Верно", Toast.LENGTH_LONG).show();
			Intent intent1 = new Intent(this, Two.class);
			startActivity(intent1);
			break;
		case R.id.btn3:
			Toast.makeText(this, "Не Верно", Toast.LENGTH_LONG).show();
			Intent intent2 = new Intent(this, Two.class);
			startActivity(intent2);
			break;
		case R.id.btn4:
			Toast.makeText(this, "Не Верно", Toast.LENGTH_LONG).show();
			Intent intent3 = new Intent(this, Two.class);
			startActivity(intent3);
			break;
			
		
		};
	};
а куда передаем там вот так

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

public class Result extends Activity {
EditText tv;
int x;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_result);
		Intent intent = getIntent();
	    
	    int x = intent.getIntExtra("x", 0);
		tv = (EditText)findViewById(R.id.tv);
		tv.setText(x);
		
	}

Re: Урок 28. Extras - передаем данные с помощью Intent

Добавлено: 10 ноя 2013, 12:52
Foenix
Выделяешь как обычно ВСЕ КРАСНЫЕ СТРОЧКИ в логе, дальше ctrl+C, и тут ctrl+V

а то просишь лог, вначале не понимают, потом наконец-то вставляют сюда 1 какую-нибудь строчку, потом три, потом только целиком!