咋样刷新Fragment里的ListView

枕霞旧友 2014-11-13 08:50:33
写了个viewpager里面嵌了三个页面,FragmentViewPager2继承Fragment,通过menu跳到发帖页面ActivityIssue,发帖后返回FragmentViewPager2,怎么刷新listView刷新帖子列表啊,list用的SimpleAdapter适配器,求大神!
package com.qiao.tiebatime.fragment;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.qiao.tiebatime.R;
import com.qiao.tiebatime.activity.ActivityIssue;
import com.qiao.tiebatime.activity.ActivityRegister;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

@SuppressLint("ValidFragment")
public class FragmentViewPager2 extends Fragment {

private String text;
private TextView tv = null;
private Button button;
private EditText editText;
private String i, title;
private ListView listView;
private List<Map<String, Object>> data;

@SuppressLint("ValidFragment")
public FragmentViewPager2(String text) {
super();
this.text = text;
}

/**
* 覆盖此函数,先通过inflater inflate函数得到view最后返回
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.zyc2_2, container, false);
button = (Button) v.findViewById(R.id.shishi2);
editText = (EditText) v.findViewById(R.id.ethsishi2);
ObtainList();
listView = (ListView) v.findViewById(R.id.listView2);
SimpleAdapter adapter = new SimpleAdapter(
FragmentViewPager2.this.getActivity(), data,
R.layout.list_item_2, new String[] { "u_name", "title" },
new int[] { R.id.tv10, R.id.tv20 });
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
return v;
}

@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
}

// 用get请求获取帖子列表
public void ObtainList() {
// http地址
String httpUrl = "http://10.0.2.2:8080/MyBlog/list";
// 1、HttpGet连接对象(创建HttpGet对象相当于使用get方式请求)
HttpGet httpRequest = new HttpGet(httpUrl);
try {
// 2、取得HttpClient对象
HttpClient httpclient = new DefaultHttpClient();
// 3、请求HttpClient,取得HttpResponse
HttpResponse httpResponse = httpclient.execute(httpRequest);
// 请求成功
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
// 取得返回的字符串
String strResult = EntityUtils.toString(httpResponse
.getEntity());
i = strResult;
parseJSONArray(i);
} else {
editText.setText("请求错误!");
}
// 关闭连接
httpclient.getConnectionManager().shutdown();
} catch (ClientProtocolException e) {
editText.setText(e.getMessage().toString());
} catch (IOException e) {
editText.setText(e.getMessage().toString());
} catch (Exception e) {
editText.setText(e.getMessage().toString());
}
}

@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}

// 解析返回的帖子列表j son字符串
public void parseJSONArray(String json) {
data = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
try {
JSONArray jsonArray = new JSONArray(json);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String title = jsonObject.getString("title");
String u_name = jsonObject.getString("u_name");
editText.setText(editText.getText() + u_name + ":");
editText.setText(editText.getText() + title + "\n");
map = new HashMap<String, Object>();
map.put("u_name", u_name);
map.put("title", title);
data.add(map);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

// menu菜单
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// TODO Auto-generated method stub
menu.add(Menu.NONE, 0, 0, "发帖");
super.onCreateOptionsMenu(menu, inflater);
}

// 菜单点击方法,跳转到发帖页面
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case 0:
// actionClickMenultem1();
Intent intent = new Intent(FragmentViewPager2.this.getActivity(),
ActivityIssue.class);
startActivity(intent);
break;
default:

break;
}
return super.onOptionsItemSelected(item);
}




}
...全文
3581 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
滑蛋牛肉饭 2016-03-23
  • 打赏
  • 举报
回复
楼主解决问题了吗
hudk114 2014-12-13
  • 打赏
  • 举报
回复
重新更新一次viewpager里的内容啊
  • 打赏
  • 举报
回复
用eventBus发消息,高效简洁
生如夏花cch 2014-11-14
  • 打赏
  • 举报
回复
引用 8 楼 cch920821 的回复:
你可以在Fragment里写个成员变量! SimpleAdapter adapter; 设置适配后 list.setAdapter(adapter); 当你需要更新的时候直接 adapter.notifyDataSetChanged(); 当然你可以在Fragment里写个方法: updateUI() { adapter.notifyDataSetChanged(); } 需要更新的时候调用一下就行了!比如在resume里直接updateUI()就行了
当然,adapter只能修改,不能重新new才有效!
生如夏花cch 2014-11-14
  • 打赏
  • 举报
回复
你可以在Fragment里写个成员变量! SimpleAdapter adapter; 设置适配后 list.setAdapter(adapter); 当你需要更新的时候直接 adapter.notifyDataSetChanged(); 当然你可以在Fragment里写个方法: updateUI() { adapter.notifyDataSetChanged(); } 需要更新的时候调用一下就行了!比如在resume里直接updateUI()就行了
bdmh 2014-11-14
  • 打赏
  • 举报
回复
可以在fragment的resume中写刷新代码,返回时会执行resume
s_wenze 2014-11-14
  • 打赏
  • 举报
回复
楼上的startActivityForResult,或者广播或者接口回调
枕霞旧友 2014-11-14
  • 打赏
  • 举报
回复
引用 6 楼 tiantang198707 的回复:
[quote=引用 5 楼 u010649586 的回复:] [quote=引用 1 楼 tiantang198707 的回复:] 如果发帖都是从FragmentViewPager2跳转到ActivityIssue然后返回的话,建议可以用startActivityForResult,发帖玩后setResult ok,这样就可以在FragmentViewPager2里的onActivityResult里重新get一次list是数据,更新data,然后notifyDataChange 如果不是的话,可以把data的获取放到onstart里面去,这样每一次重新回到FragmentViewPager2都会重新获取一次数据,显示的总是最新的
不知道咋更新data,重新发请求么[/quote] 如果你发贴后本地不做缓存的话,就只有重新请求。 如果你做了缓存就可以读取本地缓存数据 这个要看你的软件架构和逻辑设计成什么样子了[/quote] 木有缓存,只是菜鸟级的练习,发帖后会把帖子写进服务端的数据库,看来只能重新请求了
heaven_wsh 2014-11-14
  • 打赏
  • 举报
回复
引用 5 楼 u010649586 的回复:
[quote=引用 1 楼 tiantang198707 的回复:] 如果发帖都是从FragmentViewPager2跳转到ActivityIssue然后返回的话,建议可以用startActivityForResult,发帖玩后setResult ok,这样就可以在FragmentViewPager2里的onActivityResult里重新get一次list是数据,更新data,然后notifyDataChange 如果不是的话,可以把data的获取放到onstart里面去,这样每一次重新回到FragmentViewPager2都会重新获取一次数据,显示的总是最新的
不知道咋更新data,重新发请求么[/quote] 如果你发贴后本地不做缓存的话,就只有重新请求。 如果你做了缓存就可以读取本地缓存数据 这个要看你的软件架构和逻辑设计成什么样子了
枕霞旧友 2014-11-14
  • 打赏
  • 举报
回复
引用 1 楼 tiantang198707 的回复:
如果发帖都是从FragmentViewPager2跳转到ActivityIssue然后返回的话,建议可以用startActivityForResult,发帖玩后setResult ok,这样就可以在FragmentViewPager2里的onActivityResult里重新get一次list是数据,更新data,然后notifyDataChange 如果不是的话,可以把data的获取放到onstart里面去,这样每一次重新回到FragmentViewPager2都会重新获取一次数据,显示的总是最新的
不知道咋更新data,重新发请求么
枕霞旧友 2014-11-14
  • 打赏
  • 举报
回复
引用 3 楼 bdmh 的回复:
可以在fragment的resume中写刷新代码,返回时会执行resume
咋写,用notifyDataSetChanged()么,用不了啊
heaven_wsh 2014-11-13
  • 打赏
  • 举报
回复
如果发帖都是从FragmentViewPager2跳转到ActivityIssue然后返回的话,建议可以用startActivityForResult,发帖玩后setResult ok,这样就可以在FragmentViewPager2里的onActivityResult里重新get一次list是数据,更新data,然后notifyDataChange 如果不是的话,可以把data的获取放到onstart里面去,这样每一次重新回到FragmentViewPager2都会重新获取一次数据,显示的总是最新的

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧