0

这个问题实际上是一个 3 部分问题。请为我的问题提出有效的解决方案。

应用概述

我正在创建一个具有初始屏幕和 ListView 的应用程序。单击启动器图标时,首先显示初始屏幕,然后在 3-4 秒后,初始屏幕调用 ListView 活动,用户在手机屏幕上留下 ListView 项目。单击每个项目时,用户将可以看到相应的文本内容。阅读内容后,用户将单击“返回”按钮并再次返回到列表视图项目部分。如果他/她想阅读任何其他项目内容,点击该项目将被带到该页面。如果不愿意,则单击手机上的“返回”按钮,应用程序将关闭。

第 1 部分 - 我真正想做的事

我想在单击不同的 listView 项目时显示不同的文本内容(不是普通文本,而是样式(粗体/斜体/包含图像等)。我可以创建 html 页面并将它们存储在本地的资源文件夹中但不知道如何在调用 onItemClickListener 时调用这些页面。我不确定这是否是执行此类工作的有效方法。请建议。到目前为止它还没有工作

第 2 部分 - 我现在正在做的事情

由于我无法调用文本内容,所以我在一些文本编辑器上编写了内容,在编辑器上完成了所有花哨的工作,当内容准备就绪时,我截取了屏幕截图,然后在调用 onItemClickListener 时调用了该图像。它工作正常,我可以在单击我的 ListView 项目时看到图像。

第 3 部分 - 我面临的问题

当图像显示给用户时,单击“返回”按钮,应用程序将关闭,而不是返回到 ListView 部分。显然,单击列表视图项时打开的图像与 ListView 本身处于相同的活动中。我想要的是用户在阅读完文本内容后应该能够返回 ListView 部分。

下面是 ListView Activity 的代码: public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ListView listView = (ListView) findViewById(R.id.menulist);
    String[] values = new String[] { "1. First Article Here", "2. Second Article Here", "3. Third Article Here"};

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        R.layout.custom_listview, R.id.text1, values);

    // Assign adapter to ListView
    listView.setAdapter(adapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, android.view.View view, int position, long id){
            //
            if(0==position)
            {
                setContentView(R.layout.image0); 

             }
            else if (1==position)
            {

            }
        }        

    });

} *代码可以正常工作到 setContentView(R.layout.image0); *但在此之后,我希望应用程序在单击“返回”按钮时返回到 ListView 部分,但它会关闭。请指导。

4

5 回答 5

0

可能会解决,

在另一个活动中使用 layout.image0 并在单击列表项时按意图调用。

通过使用它,当您单击后退按钮时,您可以查看以前的活动

于 2012-07-24T08:13:25.760 回答
0

当您按下后退按钮时,当前活动将关闭,您将返回到堆栈上的前一个活动。假设您没有通过按下列表元素来更改活动,而只是更改布局,按下后退按钮会清空堆栈并关闭您的应用程序。

最干净的方法是在另一个活动中启动启动画面。

解决它的其他几种方法是: - 添加一堆片段

或者(最肮脏的方式),覆盖 onBackPressed(),当你的应用程序显示启动屏幕时拦截它并将布局更改回列表视图。

我更喜欢其他方法。

于 2012-07-24T08:18:42.453 回答
0

如果您使用setContentView()方法,后退按钮功能将不起作用,因为没有Activity创建新的,您可以从中返回listView. 我宁愿把被点击的项目的有用信息,放在一个Intent链接)中,然后调用startActivity()方法,开始一个新的活动,向用户展示内容。然后,如果用户单击后退按钮,“详细信息”活动将消失,用户再次看到listView.

于 2012-07-24T08:19:12.207 回答
0

您正在使用 setContentView,因此它在 OnItem Click 中使用您的新视图覆盖当前视图...而是将视图组添加到您的活动中,如相对布局...当您单击 Itme 时,将新布局添加到您现有的布局和在背面删除布局。

或者您可以使用 DialogView 动态添加视图..见下文:

    Dialog dialog = new Dialog(this, android.R.style.Theme_Dialog);
    dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, 0xff000000);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(Your VIew);
    dialog.show();

或者最后你可以使用你当前的活动开始另一个意图..

于 2012-07-24T08:23:10.367 回答
0

第 1 部分和第 2 部分

您可以使用 XML 文件创建复杂且样式化的布局。

如果你真的想使用 HTML,我建议你使用WebView. 您可以将纯 html 字符串存储在资源中的某个位置,并用于Webview.loadDataWithBaseUrl()WebView.

您可以根据自己的功能做出选择。如果您有很多不同的事件要处理(例如单击 a View),我会选择 XML 文件。因为您可以将不同的侦听器分配给单独Views的 . 当您的功能没有像现在这样更进一步时,只需单击整个视图。您也可以使用 a WebView

第 3 部分 问题是您在滥用-setContentView方法。setContentView告诉Activity它必须使用哪个 XML 文件。在您的情况下,Activity创建时,它将使用R.layout.activity_main.

当您单击您的项目时,您告诉Activity.. 不要再使用R.layout.activity_main了,而是使用R.layout.image0. 将Activity执行此操作并显示您的图像。

不过,这不是更改布局的好方法,并且会打乱您的工作流程。显示图像时,您的应用程序关闭的原因Back是只启动了 1 个 Activity。(您的堆栈仅包含 1 Activity)您刚刚切换了布局,但没有Activity开始新的布局。

解决方案

创建 2 个活动:

  1. 创建一个主要Activity显示您的列表并设置布局setContentView(R.layout.activity_main)。当您的点击事件被触发时,您将开始第二个Activity. Intent i = new Intent(...). 您还可以Intent在第二个 Activity 中添加一些参数并访问它们,以了解单击了哪个项目以及要显示哪个图像。
  2. 显示您的内容或在您的情况下为图像的详细活动。setContentView(R.layout.image0).

解决方案 2

创建一个弹出窗口以显示您的内容。您可以为此使用对话框

于 2012-07-24T08:43:54.403 回答