Android菜鸟一枚,请教大神两个问题,不胜感激!

sinat_32010083 2016-09-01 09:57:15
问题1:listview数据不能及时显示:为什么数据请求回来之后ListView不能及时显示,而非得将页面重新打开关闭若干次才显示呢?网上说是因为adapter.notifyDataSetChanged();这个方法没有写,但是我已经写了,还是更新不出来,不知道是什么原因,希望哪位大神能帮忙解答一下,若有参考的代码最好,感谢!
问题2:listview的数据只显示一条:从服务器请求回来的数据实际有很多条,但是显示的时候只有一条数据,其他的不显示。网上说的是ScrollView与ListView的冲突,可是当前使用的布局中并没有ScrollView,此何解?若干参考代码更好,谢谢!
...全文
270 7 打赏 收藏 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinat_32010083 2016-09-03
  • 打赏
  • 举报
回复
非常感谢大家的细心指点,大神一指点,胜过加两天班,真的是太棒了。
zhang106209 2016-09-02
  • 打赏
  • 举报
回复
刷新数据应该在写 public void onSuccess(String result) {}方法里,你只显示一条数据可能是你的item布局设置的是match_parent,改一下就可以了
sinat_32010083 2016-09-02
  • 打赏
  • 举报
回复
谢谢大家!代码来也! import java.util.ArrayList; import java.util.List; import java.util.Map; import org.xutils.x; import org.xutils.common.Callback.CommonCallback; import org.xutils.http.RequestParams; import com.lxg.utopia.R; import com.lxg.utopia.adapter.base2.CommonAdapter; import com.lxg.utopia.adapter.base2.ViewHolder; import com.lxg.utopia.bean.ReceiveAddressBean; import com.lxg.utopia.bean.ReceiveAddressBean.AddressBean; import com.lxg.utopia.entity.InterfaceUrl; import com.lxg.utopia.utils.GsonUtils; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.os.Parcelable; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.ListView; public class D10_ReceiveAddressActivity extends Activity implements OnClickListener{ private ImageView backImg; private Button addNewAdress; private SharedPreferences preferences; private Editor spEditor; private String memberId; private ArrayList<AddressBean> addressDatas; private ListView receiveAdressListView; private Parcelable onSaveInstanceState; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getAddressList(); setContentView(R.layout.activity_d10__receive_address); findViewById(); /** *ProgressDialog属性 *setProgressStyle: 设置进度条风格,风格为圆形,旋转的; *setTitlt: 设置ProgressDialog 标题; *setMessage: 设置ProgressDialog提示信息; *setIcon: 设置ProgressDialog标题图标; *setIndeterminate: 设置ProgressDialog 的进度条是否不明确; *setCancelable: 设置ProgressDialog 是否可以按返回键取消; *setButton: 设置ProgressDialog 的一个Button(需要监听Button事件); *show: 显示ProgressDialog。 * */ ProgressDialog dialog = new ProgressDialog(this); dialog.setProgressStyle(TRIM_MEMORY_BACKGROUND); dialog.setTitle("加载"); dialog.setIcon(R.drawable.toast_icon); dialog.setMessage("正在加载数据,请稍候……"); dialog.show(); ReceiveAddressAdapter addressAdapter = new ReceiveAddressAdapter(this, addressDatas, R.layout.receive_address_item); if (addressAdapter != null) { /*listview.setselection(position),表示将列表移动到指定的Position处。 * 举例说明: * listView中有100条记录,如果想定位到某一条上面去就可以直接调用listView.setSelection(position); * 记录listView滚动到的position的坐标,然后利用listView.scrollTo精确的进行恢复 * 记录listView显示在屏幕上的item的位置,然后利用listView.setSelection恢复 * 通知listView的适配器数据变更,这种适用于listView追加数据的情况,严格说不是恢复listView滚动的位置,只是保持滚动位置不错*/ receiveAdressListView.setSelection(0); receiveAdressListView.setAdapter(addressAdapter); addressAdapter.notifyDataSetChanged(); dialog.dismiss(); } } /**从服务器获取收货地址列表 * MemberId 是 int 用户ID * */ private void getAddressList() { addressDatas = new ArrayList<AddressBean>(); RequestParams params = new RequestParams(InterfaceUrl.URL_RECEIVE_ADDRESS); params.addBodyParameter("MemberId", memberId); x.http().post(params, new CommonCallback<String>() { private AddressBean addressBean; @Override public void onCancelled(CancelledException arg0) { } @Override public void onError(Throwable arg0, boolean arg1) { } @Override public void onFinished() { } @Override public void onSuccess(String result) { System.out.println("收货地址:" + result); ReceiveAddressBean receiveAddressBean = GsonUtils.jsonToBean(result, ReceiveAddressBean.class); List<AddressBean> data = receiveAddressBean.Data; addressBean = new AddressBean(); for (int i = 0; i < data.size(); i++) { String name = data.get(i).Name; String mobile = data.get(i).Mobile; String areas = data.get(i).Areas; addressBean.setName(name); addressBean.setMobile(mobile); addressBean.setAreas(areas); } addressDatas.add(addressBean); } }); } private void findViewById() { preferences = getSharedPreferences("UserInfo", Context.MODE_PRIVATE); spEditor = preferences.edit(); memberId = preferences.getString("memberId", ""); receiveAdressListView = (ListView)findViewById(R.id.receive_address_listview); backImg = (ImageView)findViewById(R.id.head_back_image); backImg.setOnClickListener(this); addNewAdress = (Button)findViewById(R.id.add_new_address); addNewAdress.setOnClickListener(this); } /**销毁前做一下数据及状态的保存,下次启动页面的时候重新加载,但貌似没什么用*/ @Override protected void onDestroy() { super.onDestroy(); onSaveInstanceState = receiveAdressListView.onSaveInstanceState(); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.head_back_image: finish(); break; case R.id.add_new_address: startActivity(new Intent(D10_ReceiveAddressActivity.this, D11_AddNewAdressActivity.class)); break; } } class ReceiveAddressAdapter extends CommonAdapter<AddressBean> implements OnClickListener{ private int itemClicked; public ReceiveAddressAdapter(Context context, List<AddressBean> datas, int layoutId){ super(context, datas, layoutId); } /** * 实现public abstract void convert(ViewHolder holder, T t); */ @Override public void convert(ViewHolder holder, final AddressBean bean){ holder.setText(R.id.tv_address_name, bean.Name) .setText(R.id.tv_address_phone, bean.Mobile) .setText(R.id.tv_address, bean.Areas); holder.getView(R.id.delete_address).setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.delete_address: post2DeleteAddress(); break; default: break; } } private void post2DeleteAddress() { RequestParams params = new RequestParams(InterfaceUrl.URL_DELETE_RECEIVE_ADDRESS); params.addBodyParameter("ID", "3"); x.http().post(params, new CommonCallback<String>() { @Override public void onCancelled(CancelledException arg0) { } @Override public void onError(Throwable arg0, boolean arg1) { } @Override public void onFinished() { } @Override public void onSuccess(String result) { Map<String, Object> maps = GsonUtils.changeGsonToMaps(result); if (maps.get("Result").toString().equals("true")) { System.out.println("删除成功"); } else { System.out.println("删除失败"); } } }); } } }
ink_s 2016-09-02
  • 打赏
  • 举报
回复
然饿 你没贴代码 鬼知道到底是为啥
疯狂的兔子ccc 2016-09-02
  • 打赏
  • 举报
回复
我觉得你问这些问题的时候最好贴下你的代码
会有那一天 2016-09-02
  • 打赏
  • 举报
回复
listview只显示一条,有可能是因为你嵌套在其他view里面有事件冲突,导致listview的高度无法确定,这个时候可以通过自定义listview或动态计算listview高度来解决。
一不小心_ 2016-09-01
  • 打赏
  • 举报
回复
问题1: 要想数据更新的话,在setAdapter之后必须调用notifyDataSetChanged,同时,setAdapter中的数据源必须是同一个引用,否则无效 问题2: 可能是你代码的问题,可以把你的adapter代码贴出来看一下

80,490

社区成员

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

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