Страница 1 из 1

Доступ к элементам ListView

Добавлено: 04 июн 2013, 20:50
dimky
Привествую всех.

Возникла у мена такая трудность значит. Есть ListView, есть xml с тестовыми вопросами и ответами.
Адаптером заполняю ListView этими данными используя отдельный лейаут.

Все это делается таким кодом:

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

ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();

        Document doc = ParseXMLMethods.XMLfromString(questions_raw);
            
		NodeList children = doc.getElementsByTagName("question");
					
		for (int i = 0; i < children.getLength(); i++)
		{							
			HashMap<String, String> map = new HashMap<String, String>();	
			Element e = (Element)children.item(i);
        	map.put("title", ParseXMLMethods.getValue(e, "title"));
        	map.put("answer_1", ParseXMLMethods.getValue(e, "answer_1"));
        	map.put("answer_2", ParseXMLMethods.getValue(e, "answer_2"));
        	map.put("answer_3", ParseXMLMethods.getValue(e, "answer_3"));
        	mylist.add(map);			
		}		
       
        ListAdapter adapter = new SimpleAdapter(ctx, mylist , R.layout.answers_layout, 
                        new String[] { "title", "answer_1", "answer_2",  "answer_3"}, 
                        new int[] { R.id.title, R.id.answer_1, R.id.answer_2, R.id.answer_3});
        
        mod_list.setAdapter(adapter);
Внимание, вопрос: как обратится скажем к TextView с id answer_1 в 5ом элементе ListView для последующих манипуляций?

Пробую так, не работает:

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

        View v = mod_list.getChildAt(5);
        TextView element = (TextView) v.findViewById(R.id.answer_1);
        element.setText("test");

Re: Доступ к элементам ListView

Добавлено: 04 июн 2013, 21:33
Foenix
кастомный адаптер писать нужно, а в нем, в методе bindView делать что угодно по любым условиям, хоть текст менять, хоть шрифты, хоть цвета.

Re: Доступ к элементам ListView

Добавлено: 04 июн 2013, 21:43
dimky
А попроще никак? :) Не дорос я пока еще до кастомных адаптеров.

Re: Доступ к элементам ListView

Добавлено: 04 июн 2013, 22:41
Foenix
поверьте, это просто

Re: Доступ к элементам ListView

Добавлено: 05 июн 2013, 10:10
dimky
Чтож, раз так, буду изучать вопрос. За наводку спасибо. :)

Re: Доступ к элементам ListView

Добавлено: 05 июн 2013, 16:49
dimky
Разбираюсь тут с ViewBinder'ом значит и возник такой затык внутри setViewValue:
((TextView) view).setBackgroundColor(Color.parseColor("#ff0000")); - закрашивает все поле в красный, текст пропадает.
или
((TextView) view).setTextColor(Color.parseColor("#ff0000")); - текст просто пропадает.

Что я делаю не так?

Re: Доступ к элементам ListView

Добавлено: 06 июн 2013, 20:06
dimky
Ребят, ну в чем дело, нет идей? Почему при установке каких либо параметров TextView, сам текст из него пропадает?

Re: Доступ к элементам ListView

Добавлено: 06 июн 2013, 23:49
rezak90
попробуйте цвет текста указывать из восьми знаков а не из шести

Re: Доступ к элементам ListView

Добавлено: 07 июн 2013, 05:22
klblk
еще цвета можно прописать в values/colors.xml, и уже оттуда получал к ним доступ (R.color.my_color)

Re: Доступ к элементам ListView

Добавлено: 07 июн 2013, 10:41
dimky
В общем я запутал себя и всех остальных... Дело оказывается не в установке цвета, что-то с самим ViewBinder'ом.

Так он выглядит:

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

	class MyViewBinder implements SimpleAdapter.ViewBinder
	{
		@Override
	    public boolean setViewValue(View view, Object data, String textRepresentation)
	    {
	      switch (view.getId())
	      {
		      // LinearLayout
		  		case R.id.answer_1:	  			
		  			((TextView) view).setTextColor(Color.RED);		  			
		        return true;
	      }
	      return false;
	    }
	  }	
В общем не важно что будет в случае если ID равен R.id.answer_1, текст пропадает в любом случе, даже если в кейсе ничего не будет.

Re: Доступ к элементам ListView

Добавлено: 07 июн 2013, 12:50
dimky
Все, разобрался. Сдесь в уроке: http://startandroid.ru/ru/uroki/vse-uro ... viewbinder в примере кода после описания кейса стоит return true;
После замены return true на break все заработало.