【问题标题】:Put a ListActivity "in" my main activity view将 ListActivity “放入”我的主要活动视图
【发布时间】:2014-05-25 09:05:20
【问题描述】:

我将尝试更简洁地表达这个问题:

假设我有一个功能齐全的 ListActivty 比如说……比如说 GreenListActivity。

我如何“把”GreenListActivity 放在另一个现有的活动布局中?谢谢!


我的android MainActivity有一个xml文件activity_main.xml,像这样:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                tools:context="com.client.app.MainActivity">

    // some other images, buttons widgets, etc here

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipe_container"
        xmlns:android="http://schemas.android.com/apk/res/android">

        <ListView
            android:id="@+id/feedView"
            android:layout_width="wrap_content"
            ..etc..
            android:scrollbars="none"/>

    </android.support.v4.widget.SwipeRefreshLayout>

    // some other images, buttons widgets, etc here

</RelativeLayout>

一切都很好,桌子很复杂,一切都很好。所以很简单在我的主要活动中,我有...

feed = (ListView) findViewById(R.id.feedView);
superDap = new SuperAdapter(this, getLayoutInflater());
feed.setAdapter(superDap);
superDap.notifyDataSetChanged();

以及与表格和单元格处理相关的所有其他代码。

现在,我大致了解了 ListActivity,所以我新建了一个类...

public class MainFeedActivity extends ListActivity

我确实把它放在了清单中。

现在,我明白了,一般在主活动中,我会像这样启动新的列表活动:

Intent feedIntent = new Intent(MainActivity.this, MainFeedActivity.class);
startActivity( feedIntent );

我的困惑,

问题一,在 activity_main.xml 中我该怎么做才能告诉它我目前在哪里有 &lt;ListView android:id="@+id/feedView" 实际上我想“放入”我的新MainFeedActivity ?

问题二其实MainFeedActivity的xml文件应该是怎样的呢? (应该有一个吗??)

抱歉,我找到了很多很好的教程,充分解释了“如何制作 ListActivity”,

但是,

让我感到很遗憾的是,我无法学习如何在主活动页面中“放置该列表”。也就是说“在”主要活动的xml。还是我只是做错了? (该列表不应该是一项新活动吗?!)感谢您的任何指点!呸

【问题讨论】:

  • 嗨,乔。您是否在激烈的 ListFragment 研究中幸存下来?它导致任何结果吗? :D
  • 我已经开始行动了,仍在进行大规模调查!!我认为您可以对更多问题充满信心 :) 我只是在等待计时器发送赏金 :) 干杯!
  • 我想要像Yeeeeeee! All is finally up an running!! 这样的热情回答。让我知道我的努力(以及主要是你的努力)是否有任何效果。

标签: android android-intent android-listview android-activity


【解决方案1】:

我认为你对应该做什么有点困惑。

如果我理解正确,您有一个 MainActivity,它以某种方式导航到具有列表的不同活动。

  • 您的主要活动有一个 XML 文件,该文件定义了自己的布局,代表主屏幕。
  • 您的 FeedList 活动具有不同的 XML 来定义其布局。

这两个是不同的,彼此分开,当你使用你提到的意图从 HomeActivity 导航到 FeedList 活动时,你的新活动将被启动,它的 XML 将被膨胀并呈现在屏幕上,所以没有必要把家庭活动中的列表。

注意:使用普通的 Activity 而不是 ListActivity 并在该活动的 xml 中定义您想要的 ListView

如果有什么不清楚的地方欢迎追问

【讨论】:

  • “我认为你对应该做什么有点困惑。” - 是的! :) 事情是这样的:我的 MainActivity 不会“转到” 列表视图。我的 MainActivity 一个屏幕有三四个东西,其中之一是 ListView。你明白我的意思吗?此页面顶部的 XML 代码是主要活动的所有 xml 代码,即应用程序的主视图。我的主要活动做了很多事情,并且所有列表视图代码都在主要活动中。当然,主要活动有一个列表视图,可以是一个“单独的”ListActivity?如果不清楚,请见谅!
  • 我只能在该 XML 文件中看到一个 ListView,活动中还有哪些其他内容?你的意思是你隐藏了一些组件是显示列表和其他方式?
  • 你说得对:主要活动目前只有列表视图;以及包装它的“下拉刷新机制”。此外,它有很多与无关问题相关的代码。刚才,我在主项目主页上也添加了一些图像和按钮;当然,随着时间的推移,情况可能会改变。所以,就在主页上是一个ListView。目前它完美运行,但 ListView 的所有代码实际上都在 MainActivity 中。除了包含“ListView”(如您在 xml 中看到的那样),如何包含“我的自定义列表视图”ListActivity 类? (谢谢!)
  • 您不需要 ListAcitity 类,只有在导航到新活动时才需要它,现在您不再需要新活动,因为您的主要活动有列表(如果有的话)与列表相关的代码,例如适配器左右..您可以在主要活动中使用它
  • 嗯 - 那么不可能有一个活动(称之为“B”)负责处理、操作另一个活动(调用它“A”)。在我的示例中,“A”确实是主要活动,即主屏幕。而“B”是一个完全独立的新 ListActivity 子类。伙计们,我真的很想占用你们这么多时间
【解决方案2】:

可以使用不同的方法显示 ListView。

您可以使用 ListActivity 或 ListFragment(如果您要使用 Fragments)。
在这种情况下,列表必须命名为 list(@ 987654322@).
Android 会识别并管理它。

或者(我更喜欢这个),在您的设计中使用 ListView。
在这种情况下 ListView 可以有任何 id(例如 @ 987654323@).
现在你必须通过 id 找到 ListView。

在您拥有 ListView 的相同活动中,您然后以编程方式创建一个适配器,填充它并将其分配给您的 ListView。

我希望我消除了你的疑虑(至少部分)。

无论如何,这是 Lars Vogel 撰写的关于 ListViews 的精彩教程:http://www.vogella.com/tutorials/AndroidListView/article.html

【讨论】:

  • 嗨,我的班级 MainFeedActivity 扩展了 ListActivity。所以你的意思是这个类应该有一个xml文件,而且,它必须有标签'@+id/list'?谢谢!关于你的第二个建议..这实际上是我已经做过的!注意我的第一个 xml 文件。请注意,该列表“在”该主要活动中。所以我所有的列表代码都在那个主要活动中。不知道怎么分开!谢谢!
  • 您展示的布局似乎很适合您的 ListActivity。对于您的主要活动(扩展 Acrivity),使用 其他一些 xml 布局。使用 Button 或其他方法调用您的 ListActivity(当然,这两个 Activity 也可以合并为一个 ListActivity,如果您愿意,可以将其用作您的主要且唯一的 Activity)
  • 嗯。假设我有一个功能齐全的 ListActivity。 (调用,比如说“DemoListActivity”。假设我有一个不相关的页面,该页面在一列中有四个按钮。假设我想将 DemoListActivity 放在该页面上 - 假设在按钮 2 和 3 之间。搞定了吗?!谢谢!!
  • 您可以有两个按钮作为“页眉”,另外两个作为“页脚”。只需使用两个带有android:orientation="horizontal" 的LinearLayouts。给所有按钮layout_weight="1"layout_width="0dp"0dp!! 否则权重将不起作用) - 只需将 ListView 放在页眉和页脚之间(就像三明治一样)。如果您使用 RelativeLayout 来包含整个内容会更好(因此,您可以将页眉锚定到顶部,将页脚锚定到底部,然后将 ListView 放在页眉下方和页脚上方 - 这样做比说出来)
  • 我向 Golem 添加了一个赏金,以涵盖 Golem 在这个问题上帮助我完成的大量工作。非常感谢你,魔像!嘿,我很自豪赏金将你推到了 10k 以上!干杯!!你们是3l33t!!!
【解决方案3】:

这就是构建 xml 文件的方式:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:id="@+id/LinearLayout1"
    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="209dp" >
</ListView>

<TextView
    android:id="@+id/group"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

//add any additional widgets here
</LinearLayout>

在类中,我会使用片段来实现上述内容:

public static class MainFeedFragment extends ListFragment {

    public void onStart() {
        super.onStart();

        // selecting single ListView item
        ListView lv = getListView();

        // Lauching the Event details screen on selecting a single event
        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // getting values from selected ListItem
                String ID = ((TextView) view.findViewById(R.id.leader_id))
                        .getText().toString();

                Intent intent = new Intent(view.getContext(),
                        CoreTeamDetails.class);
                intent.putExtra(pid, ID);
                view.getContext().startActivity(intent);
            }
        });
    }

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.main,container, false);

        //added code to show how adapter connects to list
        ListAdapter adapter = new SimpleAdapter(getActivity(),membersList,R.layout.coreteam_item,

        setListAdapter(adapter);
        return rootView;
        }
    }

希望对你有所帮助。

【讨论】:

  • 哇!我迫不及待想试试这个!!请注意,在 xml 中,您的 listView 被称为“@android:id/list”。现在, MainFeedFragment 类如何“知道”它是填充“@android:id/list”?谢谢!
  • 添加了 LinearLayout 标签标题,否则会报错
  • onCreateView 方法中对上面的代码进行了编辑,以显示代码如何填充列表。在我的代码中,memberlist 是一个数组,其中包含您希望显示的项目列表。
  • 天哪——你们什么都知道……这太棒了……天哪,看起来 getListView 可能是这一切的关键!我不知道!
  • 嗨@JoeBlow 如果这对您有帮助,请您接受答案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多