我正在尝试从雅虎财经下载一些数据,并使用列表视图在屏幕上显示它们。 我很好地收集数据,我的问题是更新列表视图并删除数据 古董阵列。
这里我留下我的代码:
public class Fragment1 extends Fragment {
static List<String[]> datos = new ArrayList<String[]>();
static ListView lv;
static ArrayList nombres = new ArrayList();
static ArrayList valores = new ArrayList();
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_1, container, false);
messageList(v);
return v;
}
private void messageList(View v) {
adapter adapter = new adapter(getActivity(), null);
ArrayAdapter<String> adaptador = new ArrayAdapter<String>(
getActivity(), android.R.layout.simple_list_item_1, valores);
new MyLongTask().execute(adaptador);
for (int i = 0; i < datos.size(); i++) {
for (int e = 0; e < 4; e++) {
nombres.add(datos.get(i)[e]);
}
}
datos.clear();
valores = nombres;
System.out.println(valores);
lv = (ListView) v.findViewById(R.id.listView1);
lv.setAdapter(adaptador);
}
static class MyLongTask extends AsyncTask<ArrayAdapter<String>, Void, Void> {
protected void onPreExecute(ArrayAdapter<String> adaptador) {
// Avísele al usuario que estamos trabajando
}
@Override
protected Void doInBackground(ArrayAdapter<String>... params) {
System.out.println("entra en el hilo");
datos.clear();
String next[] = {};
List<String[]> list = new ArrayList<String[]>();
try {
URL url = new URL(
"http://finance.yahoo.com/d/quotes.csv?s=AAPL+GOOG+MSFT&f=nab2b3");
InputStreamReader in = new InputStreamReader(url.openStream());
CSVReader reader = new CSVReader(in);
for (;;) {
next = reader.readNext();
if (next != null) {
list.add(next);
} else {
break;
}
}
datos = list;
} catch (IOException e) {
System.out.println(e);
}
try {
Thread.sleep(200);// 2000 es 2 segundos
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("sale del hilo");
return null;
}
protected void onPostExecute(ArrayAdapter<String> adaptador) {
adaptador.notifyDataSetChanged();
System.out.println("onpostexecute");
new MyLongTask().execute();
}
}
}
答案 0 :(得分:2)
像这样的东西
public class Fragment1 extends Fragment {
static List<String[]> datos = new ArrayList<String[]>();
static ListView lv;
static ArrayList nombres = new ArrayList();
static ArrayList valores = new ArrayList();
ArrayAdapter<String> adaptador;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_1, container, false);
messageList(v);
return v;
}
private void messageList(View v) {
adapter adapter = new adapter(getActivity(), null);//what is this???
adaptador = new ArrayAdapter<String>(
getActivity(), android.R.layout.simple_list_item_1, valores);
new MyLongTask().execute(adaptador);
for (int i = 0; i < datos.size(); i++) {
for (int e = 0; e < 4; e++) {
nombres.add(datos.get(i)[e]);
}
}
datos.clear();
valores = nombres;
System.out.println(valores);
lv = (ListView) v.findViewById(R.id.listView1);
lv.setAdapter(adaptador);
}
static class MyLongTask extends AsyncTask<String, Void, List<String[]>> {
protected void onPreExecute(ArrayAdapter<String> adaptador) {
// Avísele al usuario que estamos trabajando
}
@Override
protected List<String[]> doInBackground(String... params) {
System.out.println("entra en el hilo");
datos.clear();
String next[] = {};
List<String[]> list = new ArrayList<String[]>();
try {
URL url = new URL(
"http://finance.yahoo.com/d/quotes.csv?s=AAPL+GOOG+MSFT&f=nab2b3");
InputStreamReader in = new InputStreamReader(url.openStream());
CSVReader reader = new CSVReader(in);
for (;;) {
next = reader.readNext();
if (next != null) {
list.add(next);
} else {
break;
}
}
datos = list;
} catch (IOException e) {
System.out.println(e);
}
try {
Thread.sleep(200);// 2000 es 2 segundos
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("sale del hilo");
return list;
}
protected void onPostExecute(List<String[]> list) {
adaptador.clear();
for(int i = 0; i < list.size(); i++)
{
adaptador.add(/*add each item*/);
}
adaptador.notifyDataSetChanged();
System.out.println("onpostexecute");
new MyLongTask().execute();
}
}
}
答案 1 :(得分:0)
我可以看到你绑定了ArrayList&#39; valores&#39;到listview适配器。下载了要在ListView中显示的新信息后,在onPostExecute()(在UI线程上)上运行
valores.clear();
valores = (ArrayList) YOUR_NEW_VALUES;
adaptador.notifyDataSetChanged();
其中YOUR_NEW_VALUES是您在长期任务中根据新的雅虎财务信息创建的arraylist