Android中,我在Activity中用ListView来显示数据,adapter继承BaseAdapter,第一次可显示,重复运行不显示
我的代码是看沈大海老师的新浪微博视频写的,把原来的Base认证自己改成了OAuth认证!使用的事沈大海老师的底层框架,但是我做到MainActivity时出问题了,Mai...
我的代码是看沈大海老师的新浪微博视频写的,把原来的Base认证自己改成了OAuth认证!使用的事沈大海老师的底层框架,但是我做到MainActivity时出问题了,MainActivity是暂时用来显示首页微博信息的,所以结构很简单,只有一个ListView控件用来显示微博内容,一开始我从eclipse中运行程序,能够运行,并能在MainActivity中显示出微博内容,但是,当我按返回键退出程序后,再从模拟器中运行(不是从eclipse中启动,这个是问题的重点),程序进入到MainActivity中,但是MainActivity除了有标题之外,整个屏幕都是黑的!
后来我追踪了一下,发现那些数据都已经从网上下载了下来,并且成功完成了setAdapter()操作,但是数据内容就是不再屏幕上显示,程序也没有报错!
我原以为是模拟器的问题,后来换了几个模拟器也一样,用手机测试也是这样!
这个问题困扰了我好久了,求各位大神帮帮忙!我把MainActivity的代码贴在下面了:
public class MainActivity extends Activity implements IWeiboActivity{
public static final int REFRESH_WEIBO=1;
public static final int REFRESH_ICON=2;
public ListView allStatus;//所有主页微博信息
@Override
public void init() {
// 加载当前用户的微博首页信息
Task task=new Task(Task.TASK_GET_USER_HOMETIMEINLINE
,null);
MainService.newTask(task);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
allStatus=new ListView(this);
this.setContentView(allStatus);
MainService.allActivity.add(this);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
init();
}
@Override
public void refresh(Object... param) {
// TODO Auto-generated method stub
switch(((Integer)(param[0])).intValue())
{case REFRESH_WEIBO://更新微博列表
MyAdapter ma=new MyAdapter(this,(List<Status>)param[1]);
allStatus.setAdapter(ma);
break;
case REFRESH_ICON://更新用户的头像
}
}
}
class MyAdapter extends BaseAdapter{
public List<Status> alls;
public Context context;
public MyAdapter(Context con,List<Status> list)
{alls=list;
context=con;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return alls.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
TextView tv=new TextView(context);
tv.setText(alls.get(position).getUser().getName()+":"
+alls.get(position).getText());
return tv;
}
} 展开
后来我追踪了一下,发现那些数据都已经从网上下载了下来,并且成功完成了setAdapter()操作,但是数据内容就是不再屏幕上显示,程序也没有报错!
我原以为是模拟器的问题,后来换了几个模拟器也一样,用手机测试也是这样!
这个问题困扰了我好久了,求各位大神帮帮忙!我把MainActivity的代码贴在下面了:
public class MainActivity extends Activity implements IWeiboActivity{
public static final int REFRESH_WEIBO=1;
public static final int REFRESH_ICON=2;
public ListView allStatus;//所有主页微博信息
@Override
public void init() {
// 加载当前用户的微博首页信息
Task task=new Task(Task.TASK_GET_USER_HOMETIMEINLINE
,null);
MainService.newTask(task);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
allStatus=new ListView(this);
this.setContentView(allStatus);
MainService.allActivity.add(this);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
init();
}
@Override
public void refresh(Object... param) {
// TODO Auto-generated method stub
switch(((Integer)(param[0])).intValue())
{case REFRESH_WEIBO://更新微博列表
MyAdapter ma=new MyAdapter(this,(List<Status>)param[1]);
allStatus.setAdapter(ma);
break;
case REFRESH_ICON://更新用户的头像
}
}
}
class MyAdapter extends BaseAdapter{
public List<Status> alls;
public Context context;
public MyAdapter(Context con,List<Status> list)
{alls=list;
context=con;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return alls.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
TextView tv=new TextView(context);
tv.setText(alls.get(position).getUser().getName()+":"
+alls.get(position).getText());
return tv;
}
} 展开
5个回答
展开全部
1.把init()方法放在onCreate()里,在令一个Activity里对返回键进行监听,用Intent跳转到MainActivity。
2.在跳转的时候将MainActivity的状态保存,返回的时候恢复MainActivity的状态
3.再联系
2.在跳转的时候将MainActivity的状态保存,返回的时候恢复MainActivity的状态
3.再联系
追问
不甚解!我已经将init()方法放到onCreate()方法里了,这样就不用每次覆盖掉MainActivity后再返回时重新更新网络数据!但是还是解决不了关掉程序后,再次启动程序无法显示数据的问题!关键就在于,数据已经拿到,跟踪显示数据貌似已经通过adapter添加到ListView中,但是就是显示不出来!
有劳兄台能再说清楚些,我是个新手啊!有劳啦!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把onrefresh的判断条件改一下试试,让第二遍运行程序也能重新适配
追问
这个怎么改啊?!我感觉现在的refresh()方法中的判断条件就是在每次调用refresh()方法时进行重新配置adapter,然后添加给ListView!
请兄台能详细说明一下,有劳了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序的逻辑有问题
假设你的DataList里面一共有三项,你选中的是第二个复选框,当遍历DataList的时候,由于第一个ChxeckBox不是选中的,就直接执行else里的跳转了
假设你的DataList里面一共有三项,你选中的是第二个复选框,当遍历DataList的时候,由于第一个ChxeckBox不是选中的,就直接执行else里的跳转了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主现在有没有把这个问题搞定了?我现在也遇到同样的问题...很困扰...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-08-22
展开全部
楼主现在有没有把这个问题搞定了?我现在也遇到同样的问题...很困扰...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询