显然不是一个深刻的问题,但我认为这可能是我的方法中的一个错误。
所以我已将文件listview.xml添加到布局文件夹中的项目中。
它包含这个:
<?xml version="1.0" encoding="utf-8"?>
<ListView android:id="@+id/android:list"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android" />
我也尝试过:
<?xml version="1.0" encoding="utf-8"?>
<ListView android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android" />
我的主要活动功能通常如下:
public class ToDoManagerActivity extends ListActivity {
private static final int ADD_TODO_ITEM_REQUEST = 0;
private static final String FILE_NAME = "TodoManagerActivityData.txt";
private static final String TAG = "Lab-UserInterface";
// IDs for menu items
private static final int MENU_DELETE = Menu.FIRST;
private static final int MENU_DUMP = Menu.FIRST + 1;
ToDoListAdapter mAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Create a new TodoListAdapter for this ListActivity's ListView
mAdapter = new ToDoListAdapter(getApplicationContext());
// Put divider between ToDoItems and FooterView
getListView().setFooterDividersEnabled(true);
// TODO - Inflate footerView for footer_view.xml file
TextView footerView = (TextView) getLayoutInflater().inflate(R.layout.footer_view, null);
// NOTE: You can remove this block once you've implemented the assignment
if (null == footerView) {
return;
}
// TODO - Add footerView to ListView
getListView().addFooterView(footerView);
setListAdapter(mAdapter);
setContentView(R.layout.footer_view);
这样可以解决错误:
...java.lang.RunTimeException: content must have a ListView whose id attribute is 'android.R.id.list'
我注意到,如果我注释掉setContentView(R.layout.footer_view)
位,则错误消失,这也很混乱,因为看起来错误应该在那之前触发。
这让我感到困惑,因为据我所知,这个元素存在。看起来我可能错过了加载ListView的步骤?我在这里碰到了我的头撞墙,这看起来像是非常基本的东西,而且非常糟糕......所以任何帮助都非常感谢!
干杯!
编辑:
footer_view.xml内容:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/footerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/add_new_todo_item_string"
android:textSize="24sp" >
</TextView>
EDIT2:
建议编辑后的当前onCreate:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Create a new TodoListAdapter for this ListActivity's ListView
mAdapter = new ToDoListAdapter(getApplicationContext());
// Put divider between ToDoItems and FooterView
getListView().setFooterDividersEnabled(true);
setListAdapter(mAdapter);
TextView footerView = (TextView) getLayoutInflater().inflate(R.layout.footer_view, getListView(), false);
getListView().addFooterView(footerView);
}
答案 0 :(得分:1)
对于扩展ListActivity的Activity,ListView需要存在于您在活动中使用的xml文件中,如果是footer_view
文件。
取自Google Dev Site - &#34; ListActivity的默认布局包含屏幕中央的单个全屏列表。但是,如果需要,可以通过在onCreate()中使用setContentView()设置自己的视图布局来自定义屏幕布局。 To do this, your own view MUST contain a ListView object with the id "@android:id/list"
&#34;
要将您的页脚合并到列表下方,请尝试以下操作:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<TextView
android:id="@+id/footerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/add_new_todo_item_string"
android:textSize="24sp" >
</TextView>
</LinearLayout>
答案 1 :(得分:1)
在这里,请在您的布局中尝试:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
android:id="@android:id/list" />
</LinearLayout>
这正是我在我的应用中所拥有的。
然后在你的onCreate()
,就是这个:
setContentView(R.layout.activity_main);
尝试一下,让我知道它是否有效。该代码应该工作。从那里,我们可以继续隔离问题。
编辑:
伙计,现在我看到了你的问题。这里没什么大不了的。让我们看一下你的代码(编辑得更短)。 onCreate()
方法有:
super.onCreate(savedInstanceState);
mAdapter = new ToDoListAdapter(getApplicationContext());
getListView().setFooterDividersEnabled(true);
TextView footerView = (TextView) getLayoutInflater().inflate(R.layout.footer_view, null);
getListView().addFooterView(footerView);
setListAdapter(mAdapter);
setContentView(R.layout.footer_view);
你在那里看到R.layout.activity_main
吗?这是你的问题!您的R.layout.footer_view
仅包含文本视图,但不包含ListView
,并且您的活动会一直在寻找您承诺的ListView
ListActivity
。{{1} }}。
试试这个 - 将onCreate()
方法更改为:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAdapter = new ToDoListAdapter(getApplicationContext());
setListAdapter(mAdapter);
}
然后您的activity_main.xml布局文件应如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
android:id="@android:id/list" />
</LinearLayout>
这应该有效。让我知道。
EDIT2:
现在将其添加到onCreate()
方法的末尾:
TextView footerView = (TextView) getLayoutInflater().inflate(R.layout.footer_view, null);
getListView().addFooterView(footerView);
瞧!现在应该工作。