2013-12-16 6 views
3

My ArrayAdapter показывает, что не удается разрешить адаптер. Пожалуйста, дайте мне знать, что не так с синтаксисом.ArrayAdapter, показывающий ошибку, не может решить ошибку адаптера конструктора

@Override 
    public void onRequestSuccess(List<Order> Items) { 
     Toast.makeText(HomeActivity.this, "Success", Toast.LENGTH_SHORT).show(); 
     List<Order> list = new ArrayList<Order>(); 

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

     ListAdapter<Order> adapter = new ListAdapter<String>(this, android.R.layout.simple_list_item_1, list); 
     listView.setAdapter(adapter); 

    }     

MY Класс заказа выглядит следующим образом.

public class Order { 
public String createdOn; 
public String id; 
public String lastModifiedOn; 
public String trackingNumber; 
public String tripId; 
public OrderEntry orderEntry; 
public String tripOrderStatusValue; 
public String notificationStatus; 
public String remark; 
public String createdBy; 
public String orderId; 
public String deliveryReasonCode; 
public Boolean isTripStarted; 
public Boolean isTripCompleted; 
public Boolean isOutScanned; 
public String shipmentType; 
public String deliveryTime; 

}

И мой ListAdapter выглядит следующим образом.

общественного класса ListAdapter расширяет ArrayAdapter {

public ListAdapter(Context context, int textViewResourceId) { 
    super(context, textViewResourceId); 
    // TODO Auto-generated constructor stub 
} 

private List<Order> items; 

public ListAdapter(Context context, int resource, List<Order> items) { 

    super(context, resource, items); 

    this.items = items; 

} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View v = convertView; 

    if (v == null) { 

     LayoutInflater vi; 
     vi = LayoutInflater.from(getContext()); 
     v = vi.inflate(R.layout.list_row_myschedule, null); 

    } 

    Order p = items.get(position); 

    if (p != null) { 

     TextView tt = (TextView) v.findViewById(R.id.textview1); 
     TextView tt1 = (TextView) v.findViewById(R.id.textview2); 
     TextView tt3 = (TextView) v.findViewById(R.id.textview3); 

     if (tt != null) { 
      tt.setText(p.orderStatusValue); 
     } 
     if (tt1 != null) { 

      tt1.setText(p.reasonCode); 
     } 
     if (tt3 != null) { 

      tt3.setText(p.trackingNumber); 
     } 
    } 

    return v; 
} 

}

+0

ваш ArrayAdapter конструктор wrong..change он. –

+0

Можете ли вы показать вам класс заказа, и я думаю, что этот метод не сработает. – Cropper

ответ

0

Используйте ниже

Что у вас есть настраиваемого ArrayAdapter

ListAdapter<Order> adapter = new ListAdapter<String>(this, android.R.layout.simple_list_item_1, list); 

Ваш ListAdapter<Order> имеет тип ордена. Но у вас есть new ListAdapter<String>, что неверно.

Также у вас есть

public class ListAdapter extends ArrayAdapter { 

Я предлагаю переименовать ListAdapter в CustomAdapter и заполнить список List<Order> list

Пример:

ListView lv = (ListView) findViewById(R.id.listView1); 
    for(int i=0;i<10;i++) 
    { 
     list.add(new Order("status","1","2")); 
     // 10 items in lsitview with 3 items in each row. 
     // Now all you need to do is populate your own data to list instead of the above 
    } 
    CustomAdapter cus = new CustomAdapter(MainActivity.this,list); 
    lv.setAdapter(cus); 

класс Order

public class Order { 
public String tripOrderStatusValue; 
public String deliveryReasonCode; 
public String trackingNumber; 
public Order(String tripOrderStatusValue, String deliveryReasonCode,String trackingNumber) 
{ 
     this.tripOrderStatusValue =tripOrderStatusValue; 
     this.deliveryReasonCode = deliveryReasonCode; 
     this.trackingNumber = trackingNumber; 
} 
} 

CustomAdapter, который проходит ArrayAdapter типа ордена

public class CustomAdapter extends ArrayAdapter<Order> { 

    ArrayList<Order> list; 
    LayoutInflater mInflater; 
    public CustomAdapter(Context context, ArrayList<Order> list) { 
     // TODO Auto-generated constructor stub 
     super(context, 0,list); 
     mInflater = LayoutInflater.from(context); 
     this.list =list; 
    } 


    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     ViewHolder holder; 
     if(convertView ==null) 
     { 
      convertView = mInflater.inflate(R.layout.list_item,parent,false); 
      holder = new ViewHolder(); 
      holder.tv1 = (TextView) convertView.findViewById(R.id.textView1); 
      holder.tv2 = (TextView) convertView.findViewById(R.id.textView2); 
      holder.tv3 = (TextView) convertView.findViewById(R.id.textView3); 
      convertView.setTag(holder); 
     } 
     else 
     { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     holder.tv1.setText(list.get(position).tripOrderStatusValue); 
     holder.tv2.setText(list.get(position).deliveryReasonCode); 
     holder.tv3.setText(list.get(position).trackingNumber); 
     return convertView; 
    } 



    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return super.getItemId(position); 
    } 
static class ViewHolder 
{ 
    TextView tv1,tv2,tv3; 
} 
} 

list_item.XML

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="18dp" 
     android:text="TextView" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignRight="@+id/textView1" 
     android:layout_below="@+id/textView1" 
     android:layout_marginTop="24dp" 
     android:text="TextView" /> 

    <TextView 
     android:id="@+id/textView3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignRight="@+id/textView2" 
     android:layout_below="@+id/textView2" 
     android:layout_marginTop="26dp" 
     android:text="TextView" /> 

</RelativeLayout> 

Привязать

enter image description here

+0

Не работает. :( – buggydroid

+0

@androidbug post Класс заказа. Также как список заселен? И не работает означает, что вы получаете ту же ошибку? – Raghunandan

+0

@androidbug также что является параметром 'List Items' .Если вы не заполняете список элементами, это будет пустое.Какой же ошибка, которую вы получаете сейчас после изменения? Я предлагаю вам разместить более релевантные части кода. – Raghunandan

9

Дженерики должны быть последовательными в декларации/инициализации

изменение

ArrayAdapter<Order> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); 

с

ArrayAdapter<Order> adapter = new ArrayAdapter<Order>(this, android.R.layout.simple_list_item_1, list); 

А также вы убедитесь, что this относится к контексту деятельности

+0

Пробовал это не помогло. – buggydroid

+0

@androidbug где код, который заполняет список? – Raghunandan

+1

что это не работает? Вы получаете ту же ошибку времени компиляции? – Blackbelt

1

Попробуйте использовать

ArrayAdapter<Order> adapter = new ArrayAdapter<Order>(HomeActivity.this, android.R.layout.simple_list_item_1, list); 

вместо

ArrayAdapter<Order> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); 
0

Попробуйте это, но до того, что ваш класс заказ должен cantain некоторые значения:

@Override 
public void onRequestSuccess(List<Order> Items) { 
    Toast.makeText(HomeActivity.this, "Success", Toast.LENGTH_SHORT).show(); 
     List<Order> list = new ArrayList<Order>(); 
     list =Items; 
    ListView listView = (ListView) findViewById(R.id.listview); 

    ListAdapter adapter = new ListAdapter(this, list); 
    listView.setAdapter(adapter); 

}  

И ваш ListAdapter должен выглядеть следующим образом.

public class ListAdapter extends BaseAdapter { 


private List<Order> items; 
Context mContext; 

public ListAdapter(Context context, List<Order> items) { 

super(context, items); 

this.items = items; 
this.mContext = context; 

} 
@Override 
    public int getCount() { 
     return items.size(); 
    } 

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

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 


@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

View v = convertView; 

if (v == null) { 

    LayoutInflater vi; 
    vi = LayoutInflater.from(mContext); 
    v = vi.inflate(R.layout.list_row_myschedule, null); 

} 

Order p = items.get(position); 

    TextView tt = (TextView) v.findViewById(R.id.textview1); 
    TextView tt1 = (TextView) v.findViewById(R.id.textview2); 
    TextView tt3 = (TextView) v.findViewById(R.id.textview3); 

     tt.setText(p.tripOrderStatusValue); 
     tt1.setText(p.deliveryReasonCode); 
     tt3.setText(p.trackingNumber); 

return v; 
} 

} 

проверить это, если не работает, чем комментарий:

+0

Не работает. Я не могу передать предметы напрямую. – buggydroid

+0

изменен, но я не проверял, поэтому проверьте, и если не работает, чем комментарий. – Cropper

4

Попробуйте это:

ArrayAdapter<Order> adapter = new ArrayAdapter<Order>(this.getActivity(), 

android.R.layout.simple_list_item_1, list);  
Смежные вопросы