【发布时间】:2015-01-24 02:44:44
【问题描述】:
我有一个包含 3 个标签的活动。每次我在选项卡之间切换时,我的 ListView 和 GridView(在第一个选项卡上)都会被清除,有趣的是 ArrayList 包含之前下载的所有数据,如果我调用 addToGrid() 函数,ListView 会很好地填充。
为什么在选项卡之间切换时会清除列表和网格视图。是否在每个选项卡开关上重新创建包含的片段?我是否需要查询我的数据库并在每个选项卡切换之间重新填充我的视图?
谢谢!
顺便说一句 - 我在 onResume 函数中添加了一个“if”语句。如果我离开“if”语句,listview 会将行加倍,并在切换回来时一次又一次地重新填充它。但是使用“if”语句后,我的列表视图在 onResume 上保持空白,因为正如我所提到的,ArrayList 仍然包含所有数据。
摘自包含 ListView 的片段:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
super.onCreateView(inflater, container, savedInstanceState);
v = inflater.inflate(R.layout.offers_view, null, false);
SharedPreferences preferences = getActivity().getSharedPreferences("USERINFO",
Context.MODE_PRIVATE);
user = preferences.getString("name", null);
Button showAllUserImages = (Button) v.findViewById(R.id.showAllUserImages);
showAllUserImages.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getActivity(), AllUserImages.class);
startActivity(i);
}
});
RelativeLayout topLoc = (RelativeLayout) v.findViewById(R.id.topLocationsBtn);
topLoc.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent loc = new Intent(getActivity(), com.fideli.top.guide.TopLocations.class);
startActivity(loc);
}
});
RelativeLayout guide = (RelativeLayout) v.findViewById(R.id.guideBtn);
guide.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i= new Intent(getActivity(), com.fideli.top.guide.GloveGuide.class);
startActivity(i);
}
});
return v;
}
@Override
public void onPause() {
super.onPause();
System.out.println("paused!");
}
@Override
public void onResume() {
super.onResume();
if(imageItems.isEmpty()){
getInfoFromDB();
}
if(tasteMakersList.isEmpty()){
getTastemakers();
}
if(feedList.isEmpty()){
downloadFeed();
}
}
private void downloadFeed() {
AsyncHttpClient client = new AsyncHttpClient();
System.out.println("Downloading Feed!!");
client.get("http://www.edmondvarga.com/android_dev/fideli/get-relations.php?mainUser=" + user, null,
new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
try {
JSONArray contacts = response.getJSONArray("info");
for (int i=0; i< contacts.length();i++){
JSONObject json = contacts.getJSONObject(i);
String followedUser = json.getString("folwed_users");
getFeed(followedUser);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
public void getInfoFromDB(){
datasource = new SQLiteDataSource(getActivity());
datasource.open();
List<ImageItem> values = datasource.getAllImageItems();
for (int i = 0; i < values.size(); i++) {
ImageItem ii = new ImageItem(null, null);
ii.setImage(values.get(i).getImage());
ii.setUser(values.get(i).getUser());
ii.setUserId(values.get(i).getUserId());
ii.setLikes(values.get(i).getLikes());
ii.setDescription(values.get(i).getDescription());
ii.setLocation(values.get(i).getLocation());
ii.setAddress(values.get(i).getAddress());
ii.setCity(values.get(i).getCity());
ii.setLat(values.get(i).getLat());
ii.setLng(values.get(i).getLng());
imageItems.add(ii);
addToGrid();
}
}
public void addToGrid() {
gridView = (GridView) v.findViewById(R.id.gridView);
customGridAdapter = new GridViewAdapter(getActivity(), R.layout.row_grid, imageItems);
gridView.setAdapter(customGridAdapter);
gridView.setOnItemClickListener(this);
}
【问题讨论】:
标签: android listview gridview android-listview fragment