0

したがって、私のアクティビティは Runnable を実装し、run() メソッド内で Web スクレイピングと何とか何とかを行います。しかし、それは私の質問とは関係ありません。スクレイピングを実行してから、取得した結果で ListView を更新したいと考えています。その run メソッド内には、次のものがあります。

myAL.notifyDataSetChanged();

しかし、それは私のlistViewを更新していないようです...これは私のonCreateです:

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

    loadingSiteDialog = new ProgressDialog(this);
    loadingSiteDialog.setCancelable(false);
    loadingSiteDialog.setMessage("Retrieving Data, Please Wait...");

    loadingSiteDialog.show();

    list = (ListView)findViewById(R.id.list);
    myAL = new AdapterList(this,R.layout.mainlistlayout);
    list.setAdapter(myAL);
    list.setOnItemClickListener(new OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {

        }
    });
    loading = true;
    this.run();

}

arrayadapter クラスでは、run() メソッド内で伝播する ArrayLists を使用します。私のカスタム ArrayAdapter クラス:

public class AdapterList extends ArrayAdapter<String>{

    public AdapterList(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }
    @Override
    public View getView(int pos, View convertView, ViewGroup parent){
        View v = convertView;
        if(v == null){
            LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.mainlistlayout, null);
        }
        TextView roomTV = (TextView)findViewById(R.id.roomTV);
        roomTV.setText(rooms.get(pos));
        TextView wTV = (TextView)findViewById(R.id.washersTV);
        wTV.setText(washersAvailable.get(pos) + "/" + washersTotal.get(pos));
        TextView dTV = (TextView)findViewById(R.id.dryersTV);
        dTV.setText(dryersAvailable.get(pos) + "/" + dryersTotal.get(pos));
        Log.i("CSUMB Laundy","Attempting to getView: " + convertView.toString());
        return v;
    }

}

私は何かを忘れているだけですか?カスタムリストビューで作業しなければならなかったのは久しぶりです。

4

1 に答える 1

2

それ以外の

TextView wTV = (TextView)findViewById(R.id.washersTV);

試す

TextView wTV = (TextView) v.findViewById(R.id.washersTV);

編集:

アダプターにデータを追加しないため、リストビューが更新されていないと思います。アダプタ クラスの構築メソッドを次のように変更します。

public AdapterList(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }

お気に入り:

private ArrayList<ListItem> listItems;

        public AdapterList(Context context, int textViewResourceId,
                ArrayList<YourListItemClass> objects) {
            super(context, textViewResourceId, objects);
            listItems = objects;
            // TODO Auto-generated constructor stub
        }

のみでデータを取得します

listItems.get(position);

その内容をビューに設定します。

もちろん、ListItem のようなクラスとこのクラスの ArrayList を定義して、この arraylist からアダプターを構築する必要があります。この arraylist にデータを保存したら、それをアダプターに追加します。

myAL.add(yourArrayList);

リストビューが更新されます。

于 2012-08-16T07:45:14.077 に答える