안녕하세요 누군가가 이것 좀 봐 줄 수 있고 내가 어디로 잘못 갔는지 알고 있는지 볼 수 있습니다. GetTheMoreData()에서 GetTheMoreData 및 GetTheData의 항목을 목록보기에 추가하려고 할 때까지 게시물이 작업을 실행할 때까지 제대로 작동합니다. 더 많은로드 버튼을 클릭하면 오류가 발생하지 않으며 listview는 동일하게 유지됩니다. Postexecute는 로그의 데이터를 볼 수 있기 때문에 실행되지 않습니다. doInBackground()
GetTheMoreData
의 방법에서, 당신은 감사안드로이드, 자바 listview notifyDataSetChanged(); 작동하지 않습니다
SimpleAdapter mAdapter;
String mCurFilter;
List<Map<String, String>> items = new ArrayList<Map<String, String>>();
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
String letter = getActivity().getIntent().getStringExtra("LETTER");
new GetTheData().execute(letter);
final ListView lv = getListView();
Button btnLoadMore = new Button(getActivity());
btnLoadMore.setText("Load More");
lv.addFooterView(btnLoadMore);
lv.setTextFilterEnabled(true);
btnLoadMore.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
new GetTheMoreData().execute("A");
Log.i(TAG, "loadmore clicked : ");
}
});
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//room for stuff
}
});
setListShown(false);
getLoaderManager().initLoader(0, null, this);
}
private class GetTheMoreData extends AsyncTask<String, Void, List<Map<String, String>>> {
@Override
protected List<Map<String, String>> doInBackground(String... res) {
List<Map<String, String>> items = new ArrayList<Map<String, String>>();
start = start +25;
JSONObject json = JSONfunctions.getJSONfromURL("http://www.myurl.com/main.php?letter="+res[0]+"&start="+start);
try{
JSONArray songlist = json.getJSONArray("mainlist");
for(int i=0;i<songlist.length();i++){
HashMap<String, String> map = new HashMap<String, String>();
JSONObject e = songlist.getJSONObject(i);
map.put("id", String.valueOf(i));
map.put("Item", e.getString("Item"));
items.add(map);
Log.i(TAG, "dat:" + items);
}
}catch(JSONException e) {
Log.e("log_tag", "Error parsing data "+e.toString());
}
return items;
}
@Override
protected void onPostExecute(List<Map<String, String>> items) {
mAdapter.notifyDataSetChanged();
super.onPostExecute(items);
}
@Override
protected void onProgressUpdate(Void... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}
}
private class GetTheData extends AsyncTask<String, Void, List<Map<String, String>>> {
@Override
protected List<Map<String, String>> doInBackground(String... res) {
JSONObject json = JSONfunctions.getJSONfromURL("http://www.myurl.com/main.php?letter="+res[0]+"&start=0");
try{
JSONArray songlist = json.getJSONArray("mainlist");
for(int i=0;i<songlist.length();i++){
HashMap<String, String> map = new HashMap<String, String>();
JSONObject e = songlist.getJSONObject(i);
map.put("id", String.valueOf(i));
map.put("Item", e.getString("Item"));
items.add(map);
}
}catch(JSONException e) {
Log.e("log_tag", "Error parsing data "+e.toString());
}
return items;
}
@Override
protected void onPostExecute(List<Map<String, String>> items) {
String[] from = new String[] { "Item" };
int[] to = new int[] { android.R.id.text1 };
mAdapter = new SimpleAdapter(getActivity(), items,
android.R.layout.simple_list_item_1, from, to);
setListAdapter(mAdapter);
super.onPostExecute(items);
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
switch(position)
{}
Log.i(TAG, "Item clicked: " + id);
}
// These are the rows that we will retrieve.
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
// mAdapter.swapCursor(data);
// The list should now be shown.
if (isResumed()) {
setListShown(true);
} else {
setListShownNoAnimation(true);
}
}
public void onLoaderReset(Loader<Cursor> loader) {
// mAdapter.swapCursor(null);
}
@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
// TODO Auto-generated method stub
return null;
}
새 데이터를 어댑터에 추가 한 적이없는 것 같습니다. notifyDataSetChanged()를 호출하기 전에 어댑터에 항목을 추가하지 않으시겠습니까? – Joel
글쎄, 내가 추가하려고 시도했다 \t String [] from = new String [] { "Item1"}; int [] to = 새 int [] {android.R.id.text1}; \t \t \t \t \t mAdapter = new SimpleAdapter (getActivity(), items, android.R.layout.simple_list_item_1, from, to); 하지만 로그를 볼 수있는 것처럼 그것은 백그라운드에서 실행되는 경우에도 listview가 동일하게 유지됩니다 – Guernica
이것은 actionbarsherlock 내의 조각입니다. 조각 등이없는 기본 테스트를 만들었고 notifydatasetchanged 만 호출해도 문제가 없습니다. – Guernica