返回片段后ListView为空
Posted
技术标签:
【中文标题】返回片段后ListView为空【英文标题】:ListView empty after returning to fragment 【发布时间】:2014-02-06 05:33:38 【问题描述】:我有一个 FragmentTabHost,它有 5 个选项卡,每个选项卡都有一个片段。其中一个片段包含一个 ListView。如果我将 Activity 推送到堆栈并返回,则 ListView 保持不变。如果我更改选项卡并返回到我的 ListView 片段,则列表为空。我的列表仍然存在,适配器和数据源完全相同,但表格没有绘制。
这是我的 XML
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
tools:context=".Timeline" >
<ImageView
android:id="@+id/avatarProfile"
android:layout_
android:layout_
android:scaleType="center"
android:src="@drawable/background_pattern" />
<ListView
android:id="@+id/listView1"
android:layout_
android:layout_
android:clickable="true"
android:divider="@null"
android:dividerHeight="0dp" >
</ListView>
</FrameLayout>
这是我的片段
public class Timeline extends Fragment
ListView list;
Context context;
int page = 1;
JSONArray array;
TimelineAdapter adapter;
boolean shouldReload = true;
public Timeline()
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
context = this.getActivity();
page = 1;
array = null;
getData(page);
public void onResume()
//((Activity) context).getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.yummmie_title_bar);
super.onResume();
if(array != null)
adapter.notifyDataSetChanged();
//context = this.getActivity();
//page = 1;
//array = null;
//getData(page);
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_timeline, container, false);
public interface OnFragmentInteractionListener
// TODO: Update argument type and name
public void onFragmentInteraction(Uri uri);
public void getData(int page)
RequestParams params = new RequestParams();
SharedPreferences pref = context.getSharedPreferences("YUMMMIE",Context.MODE_PRIVATE);
params.put("idUser", pref.getString("ID_USER", null));
params.put("token", pref.getString("TOKEN", null));
params.put("pagina", Integer.toString(page));
params.put("version", "1");
MessageObject.post(params, table, "getstream");
//Response handlers para login
AsyncHttpResponseHandler table = new AsyncHttpResponseHandler()
@Override
public void onSuccess(String response)
try
JSONArray temp = new JSONArray(response);
if(array == null)
array = temp;
list = (ListView)((Activity) context).findViewById(R.id.listView1);
adapter = new TimelineAdapter(context,array);
list.setAdapter(adapter);
list.setOnScrollListener(scrollListener);
else
shouldReload = true;
if(temp.length() == 0)
shouldReload = false;
array = concatArray(array,temp);
adapter.jsonArray = array;
adapter.notifyDataSetChanged();
catch (JSONException e)
// TODO Auto-generated catch block
e.printStackTrace();
@Override
public void onFailure(Throwable e, String response)
// Response failed :(
try
JSONObject jsonResponse = new JSONObject(response);
JSONArray array = jsonResponse.getJSONArray("errors");
JSONObject error = array.getJSONObject(0);
UIHelper.sendAlert(context, error.getString("message"), error.getString("name"));
catch (JSONException e1)
@Override
public void onFinish()
;
OnScrollListener scrollListener = new OnScrollListener()
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount)
if (visibleItemCount == totalItemCount)
else
if ((firstVisibleItem + visibleItemCount) == totalItemCount && (shouldReload == true))
shouldReload = false;
page++;
getData(page);
@Override
public void onScrollStateChanged(AbsListView view, int scrollState)
;
private JSONArray concatArray(JSONArray... arrs)
throws JSONException
JSONArray result = new JSONArray();
for (JSONArray arr : arrs)
for (int i = 0; i < arr.length(); i++)
result.put(arr.get(i));
return result;
【问题讨论】:
【参考方案1】:我认为这可能是因为您在Fragment
的onCreate
方法中使用getData
填充列表。请尝试使用onViewCreated
或onResume
填充您的列表。
【讨论】:
在另一个片段上按返回按钮时不会调用 onResume。【参考方案2】:首先为您的列表视图定义一个适配器。其次控制你的反应类型。我看到了字符串,但你也许可以处理 jsonarray。最后设置你的适配器 mylist.setadapter(adapter);
【讨论】:
以上是关于返回片段后ListView为空的主要内容,如果未能解决你的问题,请参考以下文章