2012-05-09 2 views
2

Я извлекаю строковые данные из элемента, щелкнутого в моем списке.Android - разделение строк списка

Элемент имеет две строки, один по имени «текущий» и один под названием «имя». в моем спискеItemOnClick(), я получаю элемент, который был нажат, а затем делает toString() на нем. то, что я получаю, это примерно так:

{current=SOMETHING, name=SOMETHING} 

Мой вопрос в том, как я их разделяю? Вот мой код onclick:

protected void onListItemClick(ListView l, View v, int position, long id) { 
    // TODO Auto-generated method stub 
    super.onListItemClick(l, v, position, id); 
    Object o = this.getListAdapter().getItem(position); 
    String current = o.toString(); 

    ((TextView) findViewById(R.id.check)).setText(current); 
} 

Я хочу использовать только текущее, например. Благодаря!

EDIT

Мой список переменных:

static final ArrayList<HashMap<String,String>> listItems = 
     new ArrayList<HashMap<String,String>>();; 
SimpleAdapter adapter; 

Создание списка:

 for(int i=0; i<num_enter; i++){ 
    final int gi = i; 
    adapter=new SimpleAdapter(this, listItems, R.layout.custom_row_view,new String[]{"name", "current"}, new int[] {R.id.text1, R.id.text2}); 
    setListAdapter(adapter); 
    HashMap<String,String> temp = new HashMap<String,String>(); 
    temp.put("name", name[i]); 
    temp.put("current", "Value: " + Integer.toString(current[i])); 
    listItems.add(temp); 
    adapter.notifyDataSetChanged(); 
    } 
+0

Какие объекты находятся в списке? Лучше всего было бы получить более специфический класс, чем 'Object' для любого' o'. –

+0

В списке есть только текст. Я добавил код – arielschon12

ответ

4

Вы могли бы сделать это таким образом (некрасиво и склонным к будущей ошибки, когда/если изменения формата) - добавьте проверки ошибок в случае, если строка не имеет нужного формата:

String s = "{current=CURRENT, name=NAME}"; 
s = s.substring(1, s.length() - 1); //removes { and } 
String[] items = s.split(","); 
String current = items[0].split("=")[1]; //CURRENT 
String name = items[1].split("=")[1]; //NAME 

После правки, кажется, что о является карта, так что вы могли бы также написать (намного лучше):

Map<String, String> map = (Map<String, String>) this.getListAdapter().getItem(position); 
String current = map.get("current"); 
String name = map.get("name"); 
0

Это не должно быть очень трудно:

protected void onListItemClick(ListView l, View v, int position, long id) { 
// TODO Auto-generated method stub 
super.onListItemClick(l, v, position, id); 
Object o = this.getListAdapter().getItem(position); 
String current = o.toString(); 

// first remove the first and last brace 
current = current.substring(1,current.length()-1); 
// then split on a comma 
String[] elements = current.split(","); 
// now for every element split on = 
String[] subelements = elements[0].split("="); 
String key1 = subelements[0]; 
String value1 = subelements[1]; 

subelements = elements[1].split("="); 
String key2 = subelements[0]; 
String value2 = subelements[1]; 


((TextView) findViewById(R.id.check)).setText(current); 
} 
3

Wow, все проходит долгий путь. Получите данные непосредственно из представления. View v в этом случае является вашей строкой макета, поэтому с помощью этого вы можете найти отдельные текстовые изображения, используя findViewById, и получить текст от них. Используя ваш код, он будет выглядеть так:

protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 

    TextView nameTxt = (TextView) v.findViewById(R.id.Text1); 
    TextView currentTxt = (TextView) v.findViewById(R.id.Text2); 
    String name = nameTxt.getText().toString(); 
    String current = currentTxt.getText().toString(); 
} 

Надеюсь, это поможет!