0

我想在我的列表活动中添加一个等待圈。我在这篇文章中使用了答案: Using the "animated circle" in an ImageView while loading stuff

但是我认为我必须添加等待圈布局的 setContentView 才能使用 findViewById。问题是我不知道我是否可以在同一个活动中使用两次 setContentView。

现在,当我尝试它时,我收到一个错误,我最常使用 setContentView 和我想要使用的列表视图布局的 id。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listview);}


    public void showCallList() // show call list on screen
{
    getListView().setVisibility(View.GONE);
    findViewById(R.loadingPanel).setVisibility(View.VISIBLE);
    CallListArrayAdapter adapter = new CallListArrayAdapter(this,
            arrayListCalls);
    setListAdapter(adapter);
    findViewById(R.id.loadingPanel).setVisibility(View.GONE);
    getListView().setVisibility(View.VISIBLE);
}

我得到的例外是:

E/AndroidRuntime(4320):原因:java.lang.RuntimeException:您的内容必须有一个 id 属性为 'android.R.id.list' 的 ListView

4

4 回答 4

0

您不能再次调用 setContentView。相反,您应该将附加布局添加到还包含 ListView 的主 XML 中。然后你可以在那里找到它。

于 2012-10-17T20:08:27.393 回答
0

实际上,您不需要 ListActivity 来拥有 ListView。您也可以将普通的 Activity 与普通的 layout.xml 一起使用,然后<ListView>在其中放置一个以及您想要的所有其他视图。

而不是getListView()由 ListActivity 定义的 ,使用findViewById()您在 layout.xml 中提供的 ListView 的普通 ID。

于 2012-10-17T20:09:22.027 回答
0

如果您尝试呈现自己的自定义视图(动画圈),并将其添加到您必须使用 addContentView(视图视图,ViewGroup.LayoutParams 参数)的活动中,它会为活动添加额外的内容视图。在活动中的任何现有视图之后添加 - 不会删除现有视图。这些是参数: view 要显示的所需内容。params 视图的布局参数。

但是正确的方法(当然取决于您要加载的数据量)是使用 AsyncTask ,它可以正确和轻松地使用 UI 线程。此类允许在 UI 线程上执行后台操作并发布结果,而无需操作线程和/或处理程序。异步任务由在后台线程上运行的计算定义,其结果在 UI 线程上发布。异步任务由 3 个通用类型定义,称为 Params、Progress 和 Result,以及 4 个步骤,称为 onPreExecute、doInBackground、onProgressUpdate 和 onPostExecute。例如,您可以在 onPreExecute 方法上调用进度对话框(功能作为您的等待圈)并在 doInBackground 方法中列出您的文件。祝你好运!!!!

于 2012-10-17T20:13:54.207 回答
0

是的,它可以很容易地完成。

像创建普通活动一样创建布局 xml,并在此活动中创建一个空的列表视图android:id=@android:id/list

当您启动 ListActivity 时,将 ContentView 设置为您的自定义布局。将ListActivity自动找到带有 id 的 listView android:id/list,并将该 listview 用于所有与列表相关的功能。

ListActivity 中的相关文本:

ListActivity 有一个默认布局,它由屏幕中央的单个全屏列表组成。但是,如果您愿意,您可以通过在 onCreate() 中使用 setContentView() 设置您自己的视图布局来自定义屏幕布局。为此,您自己的视图必须包含一个 ID 为“@android:id/list”的 ListView 对象(如果它在代码中,则为列表)

于 2012-10-17T20:14:37.540 回答