1

リストビューを埋めるために使用するArrayAdapterがありますが、oncreateイベントの外部で作成することはできませんが、その時点ではデータがありません。

public class CusPickup extends Activity {

private OrdersReady orderready_data[];
private ListView lView; 

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.orders);

ここで、nullポイントの例外が発生します。

    OrderReadyAdapter adapter = new OrderReadyAdapter(this,R.layout.listview_item_row, orderready_data);
    lView = (ListView)findViewById(R.id.listView1);
    View header = (View)getLayoutInflater().inflate(R.layout.listview_header_row, null);
    lView.addHeaderView(header);
    lView.setAdapter(adapter);

getData();
}
}

ここでは、HTTPgetからデータを取得します。

private final Handler handler = new Handler() {

        @Override
        public void handleMessage(final Message msg) {
            progressDialog.dismiss();
            String bundleResult = msg.getData().getString("RESPONSE");
                int TotalRecords = myResult.d.results.size();
                for (int i = x; i < TotalRecords; i++ ) {
                    orderready_data[i] = new OrdersReady(myResult.d.results.get(i).myStr, myDate ,invResult.d.results.get(i).numberStr, invResult.d.results.get(i).qtyInt, myAmount)
                }  
           }
}

OrderReadyAdapterを配置すると、「OrderReadyAdapter(Context、Int、OrdersReady [])をOrderReadyAdapter(Handle、Int、OrdersReady [])に変更すると、さらにエラーが発生するという修正を含むコードエラーが発生します。

また、プライベートOrdersReady orderready_data []の宣言が正しいかどうかもわかりません。コードで宣言すると、次のように宣言するためです。OrdersReady orderready_data [] = new OrdersReady [TotalRecords];

助けてくれてありがとう。


新しいアダプタ

public class OrderReadyAdapter extends ArrayAdapter<OrdersReady>{

Context context; 
int layoutResourceId;    
ArrayList<OrdersReady> data = null;

public OrderReadyAdapter(Context context, int layoutResourceId, ArrayList<OrdersReady> orderReadyArray) {
    super(context, layoutResourceId, orderReadyArray);
    this.layoutResourceId = layoutResourceId;
    this.context = context;
    this.data = orderReadyArray;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    OrderHolder holder = null;

    if(row == null)
    {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new OrderHolder();
        holder.mytxt1 = (TextView)row.findViewById(R.id.mytxt1);
        holder.mytxt2 = (TextView)row.findViewById(R.id.mytxt2);
        holder.mytxt3 = (TextView)row.findViewById(R.id.mytxt3);
        holder.mytxt4 = (TextView)row.findViewById(R.id.mytxt4);
        holder.mytxt5 = (TextView)row.findViewById(R.id.mytxt5);

        row.setTag(holder);
    }
    else
    {
        holder = (OrderHolder)row.getTag();
    }

    OrdersReady orderready = data.get(position);
    holder.mytxt1.setText(orderready.place);
    holder.mytxt2.setText(orderready.Date);
    holder.mytxt3.setText(orderready.invoice);
    holder.mytxt4.setText(String.valueOf(orderready.Qty));
    holder.mytxt5.setText(String.valueOf(orderready.Amount));

    return row;
}

static class OrderHolder
{
    TextView mytxt1;
    TextView mytxt2;
    TextView mytxt3;
    TextView mytxt4;
    TextView mytxt5;
}

}

4

1 に答える 1

2

OrdersReady[] を ArrayList に変更することをお勧めします。onCreate メソッドで初期化します。また、orderReady アダプタをクラス フィールドにします。

orderReadyArray = new ArrayList<OrderReady>();
ordersReadyAdapter = new OrderReadyAdapter(this,R.layout.listview_item_row, orderReadyArray);
lView = (ListView)findViewById(R.id.listView1);
View header = (View)getLayoutInflater().inflate(R.layout.listview_header_row, null);
lView.addHeaderView(header);
lView.setAdapter(ordersReadyAdapter);

まだデータがないため、これにより空のリストビューが初期化されます。

サーバーから OrdersReady データを受信したら、次のように orderReadyArray を更新します。

orderReadyArray.clear(); // remove old data
for (int i = x; i < TotalRecords; i++ ) {
   orderReadyArray.add(data); // add new data one by one
}
ordersReadyAdapter.notifyDataSetChanged(); // this forces the listview to repaint

または:

データを受信したら、新しいアダプターを作成してリストビューに割り当てることができます。

List<OrderReady> orderReadyArray = new ArrayList<OrderReady>(); // create a new array to hold data
for (int i = x; i < TotalRecords; i++ ) {
   orderReadyArray.add(data); // add new data one by one
}
OrderReadyAdapter ordersReadyAdapter = new OrderReadyAdapter(this,R.layout.listview_item_row, orderReadyArray);
lView.setAdapter(ordersReadyAdapter);

これにより、リストが更新されます。それでも項目が表示されない場合、問題はアダプターにあります。おそらく、getView() メソッドで行を不適切に拡張しています。

于 2012-07-22T03:37:16.293 に答える