ListView и переход на новую активность: как?

Есть кастомный ListView:
<LinearLayout
   … >
    <ListView
        android:id="@+id/listView1" >
    </ListView>
</LinearLayout>


С ячейкой:
<TextView
            android:id="@+id/text1" />
<TextView
            android:id="@+id/text2" />
<Button
            android:id="@+id/button1"/>

В списке, в 1 ячейке выводится text1, text2 и button1.

С содержимым и адаптером
public class Spisok extends Activity {

	private ArrayList<HashMap<String, Object>> Irr;
	private static final String Form1 = "form1"; // Форма1
	private static final String Form2 = "form2"; // Форма2
	private static final String Form3 = "form3"; // Форма3
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_spisok);
		setTitle("Irr");

		ListView listView = (ListView) findViewById(R.id.listView1);

		// создаем массив списков
		Irr = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> hm;

		hm = new HashMap<String, Object>();
		hm.put(Form1, "некоторый текст 1");
		hm.put(Form2, "некоторый текст 2");
		hm.put(Form3, "некоторый текст 3");
		Irr.add(hm);

		hm = new HashMap<String, Object>();
		hm.put(Form1, "некоторый текст 1");
		hm.put(Form2, "некоторый текст 2");
		hm.put(Form3, "некоторый текст 3");
		Irr.add(hm);
		
		SimpleAdapter adapter = new SimpleAdapter(this, Irr,
				R.layout.list_item, new String[] { Form1, Form2, Form3 },
				new int[] { R.id.text1, R.id.text2, R.id.text3 });
		listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<> arg0, View arg1, int position, long arg3) {
        Intent intent = new Intent (this, SecondActivity.class );
        intent.putExtra("key", "transferedText")
        startActivity(intent);
} });


Необходимо, что бы при клике на Кнопку (яз ячейки - button1) загружалась новая Активность содержащая «R.id.text3» из «form3» именно той ячейки, по кнопке которой кликнули.
Осталось дописать - intent.putExtra
  • Вопрос задан
  • 3980 просмотров
Решения вопроса 1
@ibir Автор вопроса
Учитесь умники, фиг кто помог, когда на 4 форума спрашивал...
private static final String TAG_NAME = "name";

listView.setOnItemClickListener(new OnItemClickListener() 
		        {
		        	public void onItemClick(AdapterView<?> parent, View view,  int position, long id) 
		        	{
		        		String key = ((TextView) view.findViewById(R.id.text1)).getText().toString();
		        		Intent intent = new Intent(getApplicationContext(), Prob.class);
		        		intent.putExtra(TAG_NAME, key);
		        		startActivity(intent);
		        		}
		        	});
				}


Intent intent = getIntent();
		String Name = intent.getStringExtra(TAG_NAME);

Вот так извлекаем нужное значение в нужном месте, да ещё и в нужном порядке (я применял фильтр, и значения сбивались).
Учитесь умники, фиг кто помог, когда на 4 форума спрашивал...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
itspers
@itspers
Не выдумывайте, здесь нет ни кастомного адаптера ни листвью.

Если бы у вас был кастомный адаптер - можно было бы просто повесить клик на кнопку.

Попробуйте повесить листенер на весь список, и там поглядеть не будет ли оно во вью присылать экземпляр кнопки (никогда так не делал - но вдруг прокатит). Если нет - просто напишите полноценный адаптер.

listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<> arg0, View arg1, int arg2,
                long arg3) {
            //возможно arg1 будет здесь кнопкой или текстом, хотя скорей всего всей вьюхой, но попробовать стоит

           //если прокатит - arg2 - номер в массиве
        }
    });
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы