2013-12-02 5 views
0

В принципе, я ищу, чтобы заполнить ListView значением «test» и значением «createdAt». Я выяснил, как получить один из них в списке, но не оба. Очевидно, что я не понимаю, как это работает на довольно фундаментальном уровне. Я не знаю, как получить два разных типа данных (строка и дата), чтобы они отображались вместе в одном элементе ListView. Я знаю, что SimpleAdapter нужен список, содержащий карту, но если я могу хранить только одну пару, пару значений на карте, как я могу отображать более одного значения за раз?Отображение двух разных типов данных из объекта в Listview

 public void done(List<ParseObject> results, ParseException e) { 
      if (e == null) { 
       ArrayList<HashMap<String, Date>> messages= new ArrayList<HashMap<String, Date>>(); 
       for (ParseObject result : results) { 
        HashMap<String, Date> testMap = new HashMap<String,Date>(); 
        HashMap<String, String> dateMap = new HashMap<String,String>(); 

        testMap.put("test",(String)result.get("test")); 

        dateMap.put(createdAtKey,(Date)result.getCreatedAt()); 

        messages.add(message); 
              //What do I do with the "test"values? 

       } 
       SimpleAdapter adapter = new SimpleAdapter(FeedActivity.this, messages,android.R.layout.simple_list_item_2, new String[] {testKey,createdAtKey}, new int[] {android.R.id.text1, android.R.id.text2 }); 
       setListAdapter(adapter); 
      } else { 
       Log.e(TAG, "Exception caught!", e); 
      } 
     } 
    }); 
} 
+1

вы должны создать свой собственный адаптер, который сабы BaseAdapter, то вы можете делать все, что вы хотите. –

ответ

0

Я предполагаю, что вы передаете правильные данные в свой адаптер, но не можете их отобразить.

Во-первых - вам нужно создать XML-файл, который будет представлять макет, заполняющий список. Например, если предположить, что text1 и text2 являются идентификаторами текстовых полей, которые должны отображаться результатами, я бы сделал это так:

<?xml version ="1.0" encoding="utf-8" ?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:orientation="vertical" 
    android:id="@+id/layoutContainer" > 
    <TextView 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:id="@+id/text1" /> 
</LinearLayout> 

Inisde вашей деятельности, используйте [] значение String, для достижения целевого формата:

String[] values = new String[testMap.size]; 
for(int i=0;i<testMap.size;i++) { 
    values[i] = "[" + testMap.get(yourKey) + "]-[" + dateMap.get(yourKey) + "]" //replace yourKey with the appropriate key string 
CustomAdapter myAdapter = new CustomAdapter(getActivity(), values); 

затем реализовать класс CustomAdapter, как этот

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

public class CustomAdapter extends BaseAdapter { 
    private String[] data; 
    private Context context; 

    public CustomAdapter(Context context, String[] values) { 
     this.context = context; 
     this.data = values; 
    } 
    @Override 
    public int getCount() { 
     return data.length; 
    } 
    @Override 
    public String getItem(int position) { 
     // TODO Auto-generated method stub 
     return data[position]; 
    } 
    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View adapterView = convertView; 
     if (adapterView == null) { 
      adapterView = inflater.inflate(R.layout.row, null); 
     } 
     TextView text1 = (TextView) adapterView.findViewById(R.id.text1); 
     text1.setText(data[position]); 
     return adapterView; 
    } 
} 
+0

Спасибо за это. Я абсолютно передаю правильные данные. Я зарегистрировал все (удалено из пасты), и данные есть. Я также могу правильно отображать либо дату (которая работает), так и тестовое значение (которое также работает), но не оба одновременно. Поэтому я дам этот шанс и посмотрю, что произойдет. – user2993778

+0

Я должен создать новый класс, например myAdapter, и расширить SimpleAdapter? – user2993778

+0

Да, но расширяйте 'BaseAdapter' не' SimpleAdapter' – NitroNbg

Смежные вопросы