![](/img/trans.png)
[英]Adding new ListView item and get value of item from another activity
[英]Listview jump to top when adding new item
我正在制作具有從多個URL添加數據的滾動偵聽器的應用程序,但是當我滾動列表時,跳轉到第一個位置,而不是加載URL,我知道每次我加載新URL任務時,同步任務中的適配器都會執行加載新項目,但我不知道如何解決
public class jsontask extends AsyncTask<String, String, List<newsmodel>> {
@Override
protected List<newsmodel> doInBackground(String... params) {
BufferedReader reader = null;
HttpURLConnection connection = null;
try {
URL url = new URL(params[0]);
connection = (HttpURLConnection) url.openConnection();
if (connectiondetector.isConnected()) {
connection.addRequestProperty("Cache-Control", "max-age=0");
} else {
moviemodelList.addAll((List<newsmodel>) cacheThis.readObject(
technology.this, fileName));
}
connection.connect();
InputStream stream = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(stream));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
String finaljson = buffer.toString();
JSONObject parentobject = new JSONObject(finaljson);
JSONArray parentarray = parentobject.getJSONArray("articles");
for (int i = 0; i < parentarray.length(); i++) {
JSONObject finalobject = parentarray.getJSONObject(i);
newsmodel newsmodel = new newsmodel();
newsmodel.setAuthor(finalobject.getString("author"));
if (finalobject.isNull("author")) {
}
newsmodel.setDescription(finalobject.getString("description"));
newsmodel.setTitle(finalobject.getString("title"));
newsmodel.setImage(finalobject.getString("urlToImage"));
newsmodel.setUrl(finalobject.getString("url"));
newsmodel.setPublishedAt(finalobject.getString("publishedAt"));
cacheThis.writeObject(technology.this, fileName, moviemodelList);
moviemodelList.add(newsmodel);
}
return moviemodelList;
} catch (MalformedURLException e) {
e.printStackTrace();
return moviemodelList;
} catch (IOException e) {
e.printStackTrace();
return moviemodelList;
} catch (JSONException e) {
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if (connection != null) {
}
try {
if (reader != null) {
reader.read();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return moviemodelList;
}
@Override
protected void onPostExecute(List<newsmodel> result) {
super.onPostExecute(result);
newsadapter adapter = new newsadapter(getApplicationContext(), R.layout.row, result);
lvnews.setAdapter(adapter);
}
}
public class newsadapter extends ArrayAdapter {
private List<newsmodel> moviemodelList;
private int resource;
private LayoutInflater inflater;
public newsadapter(Context context, int resource, List<newsmodel> objects) {
super(context, resource, objects);
moviemodelList = objects;
this.resource = resource;
inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
}`
這就是我執行同步任務的方式
protected void onStart() {
super.onStart();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
moviemodelList.clear();
new jsontask().execute("https://newsapi.org/v1/articles?source=engadget&sortBy=top&apiKey=ade8f00a634b4825a028837ec107afae");
lvnews.setOnScrollListener(new EndlessScrollListener() {
@Override
public boolean onLoadMore(int page, int totalItemsCount) {
new jsontask().execute("url1");
new jsontask().execute("url2");
new jsontask().execute("url3");
new jsontask().execute("url4");
new jsontask().execute("url5");
new jsontask().execute("url6");
return false;
}
});
}
從onPostExecute刪除這些行
newsadapter adapter = new newsadapter(getApplicationContext(), R.layout.row, result);
lvnews.setAdapter(adapter);
在執行doInBackground之后,您將設置適配器eveytime。 您只需要執行一次。 您可以在onCreate中完成
android AsyncTask類中使用的基本方法定義如下 :
doInBackground():此方法包含需要在后台執行的代碼。 在此方法中,我們可以通過publishProgress()方法將結果多次發送到UI線程。 要通知后台處理已完成,我們只需要使用return語句
onPreExecute():此方法包含在后台處理開始之前執行的代碼
onPostExecute():在doInBackground方法完成處理后調用此方法。 doInBackground的結果傳遞給此方法
onProgressUpdate():此方法從doInBackground方法接收進度更新,該方法通過publishProgress方法發布,並且該方法可以使用此進度更新來更新UI線程
請參考此鏈接以了解異步任務
在獲得第一個URL響應之后,調用第二個新的jsontask()。execute(“ url2”); 然后要求第三,第四,依此類推。
編寫通用代碼以一次又一次地重用它。
試試這個鏈接: http : //www.devexchanges.info/2015/03/android-listview-dynamically-load-more.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.