2012-08-19 2 views
0

Постановка задачи: -Отображение информации пользователя на ListView один за другим

В моем коде ниже, я получаю list of User's который я показываю в настоящее время на google map который работает хорошо для меня. А также мне нужно показать их на ListView, который работает неправильно.

Так что в настоящее время у меня есть список two user's in the response. И если я попытаюсь напечатать их в for loop, я вижу, что оба пользователя правильно печатаются. Но когда я пытаюсь добавить их в свой ListView, я вижу only one user, показывая на ListView twice? Но я должен видеть как пользователя один за другим на ListView.

@Override 
protected void onPostExecute(ArrayList<User> response) { 

    for(User user : response){ 

     System.out.println("User:- " +user.getFirstName()); 

// Something wrong I am doing in below line 
     adapter=new LazyAdapter(ThesisProjectAndroid.this, mStrings, user); 

     if(user.getGender()==1) { 
      Drawable marker=getResources().getDrawable(R.drawable.current_user); 
      int markerWidth = marker.getIntrinsicWidth(); 
      int markerHeight = marker.getIntrinsicHeight(); 
      marker.setBounds(0, 0, markerHeight, markerWidth); 


      myItemizedOverlay = new MyItemizedOverlay(marker); 
      mapView.getOverlays().add(myItemizedOverlay); 

      GeoPoint myPoint1 = new GeoPoint((int) (user.getLatitude()*1000000), (int) (user.getLongitude()*1000000)); 
      myItemizedOverlay.addItem(myPoint1, "myPoint1", "myPoint1"); 
     } else { 

      Drawable marker1=getResources().getDrawable(android.R.drawable.star_big_on); 
      int markerWidth1 = marker1.getIntrinsicWidth(); 
      int markerHeight1 = marker1.getIntrinsicHeight(); 
      marker1.setBounds(0, 0, markerHeight1, markerWidth1); 


      myItemizedOverlay = new MyItemizedOverlay(marker1); 
      mapView.getOverlays().add(myItemizedOverlay); 

      GeoPoint myPoint2 = new GeoPoint((int) (user.getLatitude()*1000000), (int) (user.getLongitude()*1000000)); 
      myItemizedOverlay.addItem(myPoint2, "myPoint2", "myPoint2"); 
     } 

    } 
    listView.setAdapter(adapter); 
} 

И это мой LazyAdapter class.

public class LazyAdapter extends BaseAdapter { 

    private Activity activity; 
    private String[] data; 
    private static LayoutInflater inflater=null; 
    public ImageLoader imageLoader; 
    private User userList; 

    public LazyAdapter(Activity a, String[] d) { 
     activity = a; 
     data=d; 
     inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     imageLoader=new ImageLoader(activity.getApplicationContext()); 
    } 

    public LazyAdapter(Activity b, String[] mStrings, User user) { 
     activity = b; 
     data=mStrings; 
     inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     imageLoader=new ImageLoader(activity.getApplicationContext()); 
     userList = user; 
    } 

    public int getCount() { 
     return data.length; 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     View vi=convertView; 
     if(convertView==null) 
      vi = inflater.inflate(R.layout.item, null); 

     TextView text=(TextView)vi.findViewById(R.id.text); 
     TextView text1=(TextView)vi.findViewById(R.id.text1); 
     ImageView image=(ImageView)vi.findViewById(R.id.image); 
     text.setText("Name: " +userList.getFirstName()+" "+userList.getLastName()); 
     text1.setText("Gender: " +userList.getGender()); 
     imageLoader.DisplayImage(data[position], image); 
     return vi; 
    } 
} 

И это XML для показа user's list - мне нужно, чтобы показать User's Full Name на один TextView и Gender на второй TextView

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <ImageView 
     android:id="@+id/image" 
     android:layout_width="50dip" 
     android:layout_height="50dip" android:src="@drawable/stub" android:scaleType="centerCrop"/> 
    <TextView 
     android:id="@+id/text" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" android:layout_gravity="left|center_vertical" android:textSize="20dip" android:layout_marginLeft="10dip"/> 
    <TextView 
     android:id="@+id/text1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" android:layout_gravity="left|center_vertical" android:textSize="20dip" android:layout_marginLeft="10dip"/> 
</LinearLayout> 

И это то, что я получаю в моем Emulator- показывающем пользователя дважды в моем списке, почему это так? Но это должно быть One user information на top и second user information ниже этого.

+0

Ваш 'переменная userList' использовать по каждому пункту в списке представляет только одного пользователя , Вам нужен список пользователей (полный «ответ» вы получаете в 'onPostExecute'). – zapl

+0

Можете ли вы показать мне пример того, как это будет работать, как вы сказали сейчас. Тем самым я могу это понять очень хорошо. Благодарю. – ferhan

ответ

2

Вы должны предоставить полный список пользователей адаптера

@Override 
protected void onPostExecute(ArrayList<User> response) { 

    // add all users to the adapter 
    adapter=new LazyAdapter(ThesisProjectAndroid.this, mStrings, response); 

    for(User user : response){ 

     System.out.println("User:- " +user.getFirstName()); 

     // ---- here be ur other code ---- 
    } 
    listView.setAdapter(adapter); 
} 

Ваш адаптер

public class LazyAdapter extends BaseAdapter { 

    private Activity activity; 
    private String[] data; 
    private static LayoutInflater inflater=null; 
    public ImageLoader imageLoader; 
    private List<User> userList; 

    public LazyAdapter(Activity a, String[] d) { 
     activity = a; 
     data=d; 
     inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     imageLoader=new ImageLoader(activity.getApplicationContext()); 
    } 

    public LazyAdapter(Activity b, String[] mStrings, List<User> user) { 
     activity = b; 
     data=mStrings; 
     inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     imageLoader=new ImageLoader(activity.getApplicationContext()); 
     userList = user; 
    } 

    // ---- here be ur other code ---- 

    public View getView(int position, View convertView, ViewGroup parent) { 
     View vi=convertView; 
     if(convertView==null) 
      vi = inflater.inflate(R.layout.item, null); 

     TextView text=(TextView)vi.findViewById(R.id.text); 
     TextView text1=(TextView)vi.findViewById(R.id.text1); 
     ImageView image=(ImageView)vi.findViewById(R.id.image); 
     text.setText("Name: " +userList.get(position).getFirstName()+" "+userList.get(position).getLastName()); 
     text1.setText("Gender: " +userList.get(position).getGender()); 
     imageLoader.DisplayImage(data[position], image); 
     return vi; 
    } 
} 
Смежные вопросы