【发布时间】:2012-11-09 14:39:34
【问题描述】:
大家好,希望能帮到你。
我已经构建了一个填充 ListView 的 RSS 阅读器。我想在应用启动时检查用户是否有网络访问权限,如果没有网络,那么用户应该看到 setEmptyView 视图和 toast。
在 onCreate 中,我为列表适配器设置了一个空列表,因此我希望看到空视图。然后我查询网络状态,如果没有网络,我创建一个 toast。但是我从来没有在启动时看到空视图,当我没有网络时我从来没有看到吐司。怎么回事?
public class XMLActivity extends ListActivity {
private List<JSONObject> jobs = new ArrayList<JSONObject>();
private RssListAdapter adapter;
private ListView lv;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//SET LAYOUT WITH EMPTY LIST VIEW
setContentView(R.layout.main);
View empty = findViewById(R.id.empty);
lv = getListView(); //get view layout
lv.setEmptyView(empty); //set empty view
adapter = new RssListAdapter(this,jobs); //jobs is empty array list
setListAdapter(adapter);
//CHECK FOR NETWORK AND DISPLAY TOAST
try{
boolean network = RssReader.isOnline(this); //check network state
if (!network){
Toast toast = Toast.makeText(XMLActivity.this, "No Network Access", Toast.LENGTH_LONG);
toast.show();
}
}catch (Exception e){
Toast toast = Toast.makeText(XMLActivity.this, "No Network Access", Toast.LENGTH_LONG);
toast.show();
}
// START RSS READER HANDLER
try {
jobs = RssReader.getLatestRssFeed();
} catch (Exception e) {
}
//REFRESH ADAPTER FOR LISTVIEW
adapter.clear();
for(JSONObject job :jobs){
adapter.add(job);
}
adapter.notifyDataSetChanged();
lv.setClickable(true);
为什么我看不到空视图或 toast,这个问题只发生在 onCreate 例程中。稍后的 toasts 和空视图在菜单项选择上显示良好,因此这似乎是特定于 onCreate 序列的问题。
【问题讨论】:
-
在哪里创建 toast 对象?
-
使用 Toast.makeText(this, "No Network", 3000).show();
-
用新的 Toast 方法更新了代码,但仍然没有显示 toast。
-
用新的 Toast 方法更新了代码,但仍然没有显示 toast。似乎视图没有初始化,当我没有网络时,我只是黑屏,但我的空视图是白色的。
-
我添加了一些日志记录代码来尝试缩小范围。它表明在没有网络期间运行了正确的 toast 代码,但是我没有看到任何 toast。我发现实际上,如果在 notifydatasetchanged() 之后调用它,即当列表视图不为空时,我只会看到一个 toast。为什么??为什么我的空视图此时没有显示??
标签: android android-layout listview handler toast