首页上一页 1 下一页尾页 1 条记录 1/1页
Android ListView使用 抛出AndroidRuntime(862): FATAL EXCEPTION: main 异常
发表在Java图书答疑
2013-07-14
是否精华
是
否
版块置顶:
是
否
Android从入门到精通3.19例子中编写的ListView范例,按照书上的代码敲完运行后抛出异常:
07-05 15:42:45.050: E/AndroidRuntime(862): FATAL EXCEPTION: main
07-05 15:42:45.050: E/AndroidRuntime(862): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.listviewuse/com.example.listviewuse.MainActivity}: java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called.
意思是说添加header view 前setAdapter已经使用,我们知道添加header view 、使用适配器 、添加footer view 必须严格按顺序定义。我也是这么做得。:
代码:
package com.example.listviewuse;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ListView listview=(ListView)findViewById(R.id.listview1);
listview.addHeaderView(line());
ArrayAdapter<CharSequence> adapter=ArrayAdapter.createFromResource(this,R.array.ctype,android.R.layout.simple_list_item_1);
listview.setAdapter(adapter);
listview.addFooterView(line());
listview.setOnItemClickListener(
new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent,View v,int pos,long id)
{
String result=parent.getItemAtPosition(pos).toString();
Toast.makeText(MainActivity.this,result,Toast.LENGTH_SHORT).show();
}
});
}
private View line()
{
ImageView view=new ImageView(this);
view.setImageResource(R.drawable.line1);
return view;
}
}
为什么会出现上述错误,另外,我把 listview.addHeaderView(line());这句代码删除后就能正确显示了?为什么?
07-05 15:42:45.050: E/AndroidRuntime(862): FATAL EXCEPTION: main
07-05 15:42:45.050: E/AndroidRuntime(862): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.listviewuse/com.example.listviewuse.MainActivity}: java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called.
意思是说添加header view 前setAdapter已经使用,我们知道添加header view 、使用适配器 、添加footer view 必须严格按顺序定义。我也是这么做得。:
代码:
package com.example.listviewuse;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ListView listview=(ListView)findViewById(R.id.listview1);
listview.addHeaderView(line());
ArrayAdapter<CharSequence> adapter=ArrayAdapter.createFromResource(this,R.array.ctype,android.R.layout.simple_list_item_1);
listview.setAdapter(adapter);
listview.addFooterView(line());
listview.setOnItemClickListener(
new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent,View v,int pos,long id)
{
String result=parent.getItemAtPosition(pos).toString();
Toast.makeText(MainActivity.this,result,Toast.LENGTH_SHORT).show();
}
});
}
private View line()
{
ImageView view=new ImageView(this);
view.setImageResource(R.drawable.line1);
return view;
}
}
为什么会出现上述错误,另外,我把 listview.addHeaderView(line());这句代码删除后就能正确显示了?为什么?