的每一頁上運行,我有3個選項卡像android development tutorial的AsyncTask的ViewPager
現在我想要做的是非常簡單的我用碎片在每一頁上。我想在每個頁面上顯示來自RSS源的不同內容。
問題是,當我轉到下一個選項卡時,它運行前一個Fragment的AsyncTask(它在onCreateView中)。
因此,您從第1頁開始,它會將內容加載得很好。然後當你去第2頁時再次運行頁面片段的onCreateView。顯然給了一個NullException。關鍵是它不應該在第1頁運行AsyncTask,而是在第2頁。
我不認爲有任何示例代碼需要,如果是這樣告訴我你需要看哪個部分。然後我會編輯我的問題。
的AsyncTask一個ListFragment內:
public class MyAsyncTask extends AsyncTask<List<String>, Void, List<String>>
{
// List of messages of the rss feed
private List<Message> messages;
private volatile boolean running = true;
@SuppressWarnings("unused")
private WeakReference<NieuwsSectionFragment> fragmentWeakRef;
private MyAsyncTask(NieuwsSectionFragment fragment)
{
this.fragmentWeakRef = new WeakReference<NieuwsSectionFragment>(fragment);
}
@Override
protected void onPreExecute()
{
super.onPreExecute();
mProgress.show();
// progress.setVisibility(View.VISIBLE); //<< set here
}
@Override
protected void onCancelled()
{
Log.w("onCancelled", "now cancelled");
running = false;
}
@Override
protected List<String> doInBackground(List<String>... urls)
{
FeedParser parser = FeedParserFactory.getParser();
messages = parser.parse();
List<String> titles = new ArrayList<String>(messages.size());
for (Message msg : messages)
{
titles.add(msg.getTitle());
// Log.w("doInBackground", msg.getTitle());
}
return titles;
}
@Override
protected void onPostExecute(List<String> result)
{
super.onPostExecute(result);
mProgress.dismiss();
if (result != null)
{
PostData data = null;
listData = new PostData[result.size()];
for (int i = 0; i < result.size(); i++)
{
data = new PostData();
data.postTitle = result.get(i);
data.postThumbUrl = "http://igo.nl/foto/app_thumb/28991-Taxi-vast-na-poging-tot-nemen-van-sluiproute.jpg";
listData[i] = data;
Log.w("onPostExecute", "" + listData[i].postTitle);
}
adapter = new PostItemAdapter (getActivity(), android.R.layout.simple_list_item_1, listData);
setListAdapter(adapter);
adapter.notifyDataSetChanged();
}
}
}
這就是所謂的方法內部和ListFragment的onCreateView內部執行的方法:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
startNewAsyncTask();
View rootView = inflater.inflate(R.layout.fragment_section_nieuws, container, false);
return rootView;
}
@SuppressWarnings("unchecked")
public void startNewAsyncTask()
{
MyAsyncTask asyncTask = new MyAsyncTask(this);
this.asyncTaskWeakRef = new WeakReference<MyAsyncTask>(asyncTask);
asyncTask.execute();
}
的logcat的:
請發佈您的代碼和登錄貓! –
我不知道自從加載內容的第一頁起,您想看到哪部分代碼。 logcat在頁面上運行'AsyncTask'時只會給出'NullPointerException',因爲它不應該運行它,這是邏輯的。 – Shishi
發佈您的異步任務和一段代碼,其中調用from ..Along與您的日誌貓錯誤.Error必須指出空行指針發生的行。該部分還 –