したがって、私のアクティビティは 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;
}
}
私は何かを忘れているだけですか?カスタムリストビューで作業しなければならなかったのは久しぶりです。