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

Re: Урок 41. Используем LayoutInflater для создания списка

Добавлено: 04 май 2013, 13:14
iisus92
присоединиюсь к предыдущему вопросу.

в item-ах лежат RadioButton, 4 штуки.
по какому из 4х кликнули определяется легко, а как выяснить контейнер (item) в котором это все лежит?

как создаю :

[syntax=java]
for (int i = 0; i < ImageResMatrix.length; i++)
{
View item = ltInflater.inflate(R.layout.test_item, linLayout, false);
ImageView image = (ImageView) item.findViewById(R.id.image_question);
image.setImageResource(ImageResMatrix);
ItemId = item.getId();
linLayout.addView(item);
}
[/syntax]

обрабатываю :

[syntax=java]
public void OnTestItemRBClick (View v)
{
RadioButton rb = (RadioButton)findViewById(v.getId());
rb.setBackgroundColor(Color.GREEN); //какое-то действие для примера
}[/syntax]
на какой-бы RadioButton я не жал, цвет (в данном случае) меняет только фон RadioButton-а на самом первом item-е

как быть?

Re: Урок 41. Используем LayoutInflater для создания списка

Добавлено: 27 июн 2013, 23:05
kolyall

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

package com.example.list;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{

	 String[] name = { "Иван", "Марья", "Петр", "Антон", "Даша", "Борис",
		      "Костя", "Игорь" };
		  String[] position = { "Программер", "Бухгалтер", "Программер",
		      "Программер", "Бухгалтер", "Директор", "Программер", "Охранник" };
		  int salary[] = { 13000, 10000, 13000, 13000, 10000, 15000, 13000, 8000 };

		  int[] colors = new int[2];

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		 /*LinearLayout linLayout = (LinearLayout) findViewById(R.id.linLayout);
		
		 LayoutInflater ltInflater = getLayoutInflater();
		 
		 View item = ltInflater.inflate(R.layout.item, linLayout, false);
		  TextView tvName = (TextView) item.findViewById(R.id.tvName);
	      tvName.setText("Me");
	      TextView tvPosition = (TextView) item.findViewById(R.id.tvPosition);
	      tvPosition.setText("Должность: ");
	      TextView tvSalary = (TextView) item.findViewById(R.id.tvSalary);
	      tvSalary.setText("Оклад: " + String.valueOf("salary"));
	      item.getLayoutParams().width = LayoutParams.MATCH_PARENT;
	      item.setOnClickListener(this);
	      linLayout.addView(item);
	      
	      
	      
	      
	      
	      View item2 = ltInflater.inflate(R.layout.item, linLayout, false);
		  TextView tvName2 = (TextView) item2.findViewById(R.id.tvName);
	      tvName2.setText("Me2");
	      TextView tvPosition2 = (TextView) item2.findViewById(R.id.tvPosition);
	      tvPosition2.setText("Должность2: ");
	      TextView tvSalary2 = (TextView) item2.findViewById(R.id.tvSalary);
	      tvSalary2.setText("Оклад2: " + String.valueOf("salary"));
	      item2.getLayoutParams().width = LayoutParams.MATCH_PARENT;
	      item2.setOnClickListener(this);
	      linLayout.addView(item2);*/
		
		 colors[0] = Color.parseColor("#559966CC");
		    colors[1] = Color.parseColor("#55336699");

		    LinearLayout linLayout = (LinearLayout) findViewById(R.id.linLayout);

		    LayoutInflater ltInflater = getLayoutInflater();

		    for (int i = 0; i < name.length; i++) {
		      Log.d("myLogs", "i = " + i);
		      View item = ltInflater.inflate(R.layout.item, linLayout, false);
		      TextView tvName = (TextView) item.findViewById(R.id.tvName);
		      tvName.setText(name[i]);
		      OnClickListener oclBtnOk = new OnClickListener() {
			       @Override
			       public void onClick(View v) {
			    		switch (v.getId()){
			    		case (R.id.tvName):{
			    			Toast.makeText(getApplicationContext(), "Click on item", 100).show();
			    			
			    			TextView tvName = (TextView) v.findViewById(R.id.tvName);
			    			Log.d("My", "tvNAme"+tvName.getText());
			    			break;
			    		}
			    		case (R.id.tvPosition):{
			    			Toast.makeText(getApplicationContext(), "Click on item", 100).show();
			    			Log.d("My", "tvPosition");
			    			break;
			    		}
			    		case (R.id.tvSalary):{
			    			Toast.makeText(getApplicationContext(), "Click on item", 100).show();
			    			Log.d("My", "tvSalary");
			    			break;
			    		}
			    		case (R.id.vImage):{
			    			Toast.makeText(getApplicationContext(), "Click on item", 100).show();
			    			Log.d("My", "vImage");
			    			break;
			    		}
			    		}
			       }
			     };
			 
		      TextView tvPosition = (TextView) item.findViewById(R.id.tvPosition);
		      tvPosition.setText("Должность: " + position[i]);
		      
		      TextView tvSalary = (TextView) item.findViewById(R.id.tvSalary);
		      tvSalary.setText("Оклад: " + String.valueOf(salary[i]));
		      
		      View vImage = (View) item.findViewById(R.id.vImage);
		      
		      item.getLayoutParams().width = LayoutParams.MATCH_PARENT;
		      //item.setBackgroundColor(colors[i % 2]);
		      item.setOnClickListener(this);
		      item.setClickable(true);
		      vImage.setOnClickListener(oclBtnOk);
		     /* tvName.setOnClickListener(oclBtnOk) ;
		      tvPosition.setOnClickListener(oclBtnOk) ;
		      tvSalary.setOnClickListener(oclBtnOk) ;
		      vImage.setOnClickListener(oclBtnOk);*/
		      linLayout.addView(item);
		      
		    }
	     
	      linLayout.setOnClickListener(this);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		
		TextView tvName = (TextView) v.findViewById(R.id.tvName);
		tvName.getText();
		Toast.makeText(getApplicationContext(), "Click on "+tvName.getText(), 100).show();
		v.setBackgroundColor(Color.parseColor("#559966CC"));
		Log.d("My", "item"+" "+	tvName.getText());
		
		
		
		
	}

}
Как сделать кликабельным?Т.е чтобы была анимация нажатия..

Re: Урок 41. Используем LayoutInflater для создания списка

Добавлено: 29 июн 2013, 21:35
Banhammer
ам, заметил одну вещь: между каждым добавленным View в список есть падинг, тоесть они не плотно прилегают друг к другу, но в xml не указан же падинг, почему он есть и как его можно убрать?

Re: Урок 41. Используем LayoutInflater для создания списка

Добавлено: 29 июн 2013, 21:50
rezak90
У меня нету Энигмы, так что может по подробней скажешь и покажешь о каком падинге идёт речь?

Re: Урок 41. Используем LayoutInflater для создания списка

Добавлено: 29 июн 2013, 21:54
Banhammer
http://startandroid.ru/ru/uroki/vse-uro ... piska.html <-писька лол
прогартай урок вниз, на последний скрин, там каждый добавленный View не плотно прилегает к следующему и предыдущему, тоесть есть отступ, как падинг. вот как избавиться от этого отступа или почему он появился то)

Re: Урок 41. Используем LayoutInflater для создания списка

Добавлено: 29 июн 2013, 22:29
rezak90
там же стоит android:layout_marginTop="10dp"
от сюдава и отступ

Re: Урок 41. Используем LayoutInflater для создания списка

Добавлено: 29 июн 2013, 22:39
Banhammer
странно, я смотрел, то не увидел, ща пересмотрю ещё разок, пропустил наверно, спасибо)
кста, ты не знаешь, как получить номер элемента списка, нажатием на него. какой обработчик повесить на layoutInflater?
upd
внезапно оказалось, что не вешаются обработчики на layoutInflater эт грустно...

Re: Урок 41. Используем LayoutInflater для создания списка

Добавлено: 29 июн 2013, 23:19
Banhammer
просто суть такова, есть Layout в нём 3 view. каждый должен был обработан.
вот элемент списка- эти 3 View
единственное, что я вижу- обработка нажатия каждого View до того, как он будет засунут в элемент списка, но как-то не красиво.
может есть способ проще?

Re: Урок 41. Используем LayoutInflater для создания списка

Добавлено: 29 июн 2013, 23:40
rezak90
делай ListView и получится обработка нажатия будет одна для всех

Re: Урок 41. Используем LayoutInflater для создания списка

Добавлено: 29 июн 2013, 23:44
Banhammer
ну это понятно, но я хочу побаловаться именно с этой мутью)

Re: Урок 41. Используем LayoutInflater для создания списка

Добавлено: 30 июн 2013, 00:02
rezak90
это муть велосипед, зачем изобретать его если уже всё есть?

Re: Урок 41. Используем LayoutInflater для создания списка

Добавлено: 30 июн 2013, 00:21
Banhammer
ну ты рассматриваешь ситуацию с слишком серьёзной точки зрения))

Re: Урок 41. Используем LayoutInflater для создания списка

Добавлено: 30 июн 2013, 00:50
rezak90
ну тогда вешай на каждый View обработчик

Re: Урок 41. Используем LayoutInflater для создания списка

Добавлено: 30 июн 2013, 10:48
Z11
Banhammer писал(а):просто суть такова, есть Layout в нём 3 view. каждый должен был обработан.
вот элемент списка- эти 3 View
единственное, что я вижу- обработка нажатия каждого View до того, как он будет засунут в элемент списка, но как-то не красиво.
может есть способ проще?

В обсуждении урока 40 viewtopic.php?t=93 пост 4 есть то что ты хочешь.
У меня тест получился (как там написано)

Re: Урок 41. Используем LayoutInflater для создания списка

Добавлено: 21 июл 2013, 17:39
Максим Янчий
Здравствуйте! у меня возник вопрос)
Я хочу вывести из базы данных заметки, но когда запускаю проэкт, они не появляются, а когда присваиваю данное действие кнопке, то все отлично работает, может проблема в создаваемом классе? Заранее спасибо за совет!

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

public void startList(){
		Cursor cursor = sqdb.query(NoteDataBase.TABLE_NAME, new String[] {NoteDataBase.NOTE},null,null,null,null,null);
		
		while(cursor.moveToNext()){
			LinearLayout lLayout = (LinearLayout)findViewById(R.id.lLayout);
			LayoutInflater lInflater = getLayoutInflater();
			String note = cursor.getString(cursor.getColumnIndex(NoteDataBase.NOTE));
			View item = lInflater.inflate(R.layout.item, lLayout, false);
			TextView tvNote = (TextView)item.findViewById(R.id.tvNote);
			tvNote.setText(note);
			item.getLayoutParams().width  = LayoutParams.MATCH_PARENT;
			lLayout.addView(item);
		}
		cursor.close();
	}

Re: Урок 41. Используем LayoutInflater для создания списка

Добавлено: 21 июл 2013, 18:25
Foenix
отформатируй код в редакторе

Re: Урок 41. Используем LayoutInflater для создания списка

Добавлено: 31 июл 2013, 15:01
SergeClause
Всем привет!

Скопировал 41й урок один-в-один.
Запустил.
В MainActivity ругается на linLayout, tvName, tvPosition и tvSalary
Пишет
linLayout cannot be resolved or is not a field
и т.д. по остальным вышеупомянутым.
Как от этого избавиться?

Re: Урок 41. Используем LayoutInflater для создания списка

Добавлено: 31 июл 2013, 15:24
Mikhail_dev
В импорте убрать import android.R

Re: Урок 41. Используем LayoutInflater для создания списка

Добавлено: 31 июл 2013, 15:37
SergeClause
no-- писал(а):В импорте убрать import android.R
У меня нет в импорте android.R
Я взял текст из урока буква в букву

=========================================
Всё заработало, вопрос закрыт.
Причина неизвестна.
Вернее, возможно, известна. Но тогда не понятна.

В ErrorLog-e выскакивали сообщения:

Warning: EGit couldn't detect the installation path "gitPrefix" of native Git. Hence EGit can't respect system level
Git settings which might be configured in ${gitPrefix}/etc/gitconfig under the native Git installation directory.
The most important of these settings is core.autocrlf. Git for Windows by default sets this parameter to true in
this system level configuration. The Git installation location can be configured on the
Team > Git > Configuration preference page's 'System Settings' tab.
This warning can be switched off on the Team > Git > Confirmations and Warnings preference page.

Warning: The environment variable HOME is not set. The following directory will be used to store the Git
user global configuration and to define the default location to store repositories: 'C:\Documents and Settings\Administrator'. If this is
not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and
EGit might behave differently since they see different configuration options.
This warning can be switched off on the Team > Git > Confirmations and Warnings preference page.

Если гуру разберутся и объяснят, в чем дело, - будем благодарны.

Но сообщения не пропали, продолжают выпадать.

Re: Урок 41. Используем LayoutInflater для создания списка

Добавлено: 07 авг 2013, 01:38
aleksbim
Вопрос по item.setBackgroundColor(colors[i % 2]);.
[i % 2]-
понятно как это работает здесь, но непонятно, что это. Будьте добры, "%" - это из какого раздела java?