【问题标题】:onsave/onpause save data created from one activity to anotheronsave/onpause 将一个活动创建的数据保存到另一个活动
【发布时间】:2013-11-03 03:10:08
【问题描述】:

我对编程很陌生,只是一个周末的爱好。我想创建一个类似于交互式日历的应用程序,基本上它是这样工作的..

主 Activity 显示一个日历,您可以在其中点击一个日期,然后将启动一个新的 Activity。在这个新活动中,您可以为您的项目选择一个类别,并在选择类别后将一个 ImageButton 添加到日历日期。放置按钮后,您可以点击它并设置额外信息(警报、地点、详细信息等)

我已经完成了所有的日历布局、不同活动的按钮以及动态添加日历日期 ImageButton,但我在如何做到这一点上遇到了死胡同 保存用户添加的数据(ImageButton); '点击activityB中的button1(例如运动日期)在activityA(日历)中创建一个棒球的动态图像按钮 布局,所以我的问题是如何永久保存该数据(可以由用户删除)。

过去几天我一直在阅读 Onpause、onSaveinstancestate、onConfiguration、SQL、片段和数据库。但是我无法对如何应用它做出正面或反面,更不用说将它应用到从另一个活动创建的活动对象上,我将非常感谢任何见解。

我的活动代码与创建动态按钮的按钮:

 package org.iimed.www;




    import android.os.Bundle;


    import android.view.View;
    import android.view.View.OnClickListener;

    import android.widget.Button;
    import android.widget.ImageButton;
    import android.widget.LinearLayout;

    import org.iimed.www.Sundayopen;
    import android.widget.RelativeLayout;
    import android.widget.TableLayout.LayoutParams;




    import android.app.Activity;
    import android.content.Intent;

    import android.graphics.Color;
    import android.graphics.drawable.Drawable;


        public class Penicillins extends Activity implements OnClickListener {

            ImageButton addmed,ab;
            RelativeLayout ll;




                public void onCreate(Bundle SavedInstanceState){
                     super.onCreate(SavedInstanceState);  
                     setContentView(R.layout.penicillin);
                     addmed =( ImageButton)findViewById(R.id.addmed);

                addmed.setOnClickListener(this);




                }
                public void onClick(View v) {

                    switch (v.getId()){

                    case R.id.addmed:


                         setContentView(R.layout.sundayopen);

                        ll =(RelativeLayout) findViewById(R.id.sundayopen); 




    android.widget.LinearLayout.LayoutParams b = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);

    int i = 0;
                ab = new ImageButton(this);

                ab.setImageResource(R.drawable.adaba);  
                ab.setBackgroundColor(Color.TRANSPARENT);
                ab.setLayoutParams(b);
                ab.setId(i) ;
                ab.getId();
                ab.setTag(1);
            ll.addView(ab);

                }


                }



                    }




My code for the activity the button appears in:



package org.iimed.www;



import java.util.ArrayList;

import android.R.string;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;

import android.content.Intent;

import android.view.View;


import android.widget.ImageButton;
import android.widget.RelativeLayout;


import android.view.View.OnClickListener;
public class Sundayopen extends Activity implements OnClickListener {   


    public static final Integer [] aba = {R.id.aba};

ImageButton ab;










public void onCreate(Bundle SavedInstanceState) {
  super.onCreate(SavedInstanceState);
              setContentView(R.layout.sundayopen);
         ImageButton hb1 = (ImageButton) findViewById(R.id.homebutton1);
         RelativeLayout  ll =(RelativeLayout) findViewById(R.id.sundayopen);
         ImageButton sbc = (ImageButton) findViewById(R.id.satlidopen);
         ImageButton abb = (ImageButton) findViewById(R.id.abbutton);
         sbc.setOnClickListener(this);
         hb1.setOnClickListener(this);
         abb.setOnClickListener(this);
        }





         public void onClick(View v){
             switch (v.getId()) {
             case R.id.homebutton1:
                startActivity(new Intent(this, MainActivity.class));
                 break;
             case R.id.satlidopen:
                 MediaPlayer media = MediaPlayer.create(Sundayopen.this, R.raw.openlid);
                 media.start();
                startActivity(new Intent(this,Iimedja.class));
                break;
             case R.id.abbutton:

                    startActivity(new Intent(this, ImageTextListViewActivity.class));

             }
         }





}

【问题讨论】:

    标签: android database oncreate onpause


    【解决方案1】:

    我相信您在这里问的是两个不同的问题:

    1. 如何在Activities 之间传递数据(以及如何恢复活动)
    2. 如何在您的应用程序中永久保存数据

    对于第一个有几个例子。在此处查看this answer。在我看来,您所阅读的有关恢复 Activities 的内容并不是您想要做的(至少现在还没有)。当Android需要释放内存时它可以杀死你的Activities,一个好的应用程序会在onSaveInstanceState()上保存Activity的当前状态(即它会在Activity再次启动时保存它想要恢复的数据) Bundle)。在此查看Android Developer 网站。

    关于第二个,您需要将数据保存在设备内存中(SQLite、文件系统或SharedPreferences)。所以基本上你应该保存你想要恢复的数据,根据你的解释应该是一组:

    • 日期
    • 类别
    • 闹钟时间
    • 地点
    • 详情

    如果我是你,我会创建一个 SQLite 数据库,其中包含一个 Table,其中包含你要保存的 Columns。将新项目添加到日历时保存数据,并在应用程序启动时加载所有项目数据。

    【讨论】:

    • 是否会将动态创建的 ImageButton 保存在从活动 2 创建的活动 1 中?是的,我之前正在查看该示例,但我只是看不到如何将其应用于获取/设置 ImageButton 没有用于该功能的功能,我可以以某种方式将字符串或 int 分配给动态按钮吗?也使用那个方法我如何控制按钮的参数?比如去哪里?
    • 没有简单的方法可以保存按钮等组件。您想要保留的所有内容都需要保存为原语(字符串,整数,...)。我认为 DB 方法在您的情况下更有意义,保存一个按钮需要保存所有相关数据,然后在返回活动 1 时,您将从 DB 加载所有按钮并创建它们。加载该数据后,您就知道该按钮的日期和要显示的图标,您还将知道单击时要显示的所有信息(详细信息等),因此您只需创建侦听器来显示它们。
    • 非常感谢哥们,我现在有点不知所措,很困惑。是否有任何使用数据库的示例,您可以链接到我或初学者指南?或任何关于我需要的方法的明确信息,或者它真的不能那样工作吗?
    • 这个例子可能会帮助你stackoverflow.com/a/12015869/801913或者只是在谷歌搜索android sqlite教程
    • 谢谢momo,我肯定会用它来做我的“日期、类别、闹钟时间、地点、细节”,但我仍然无法突破这个保存ImageButton的事情。在您的回答中,您说 onSave 和 onRestore 不是我想要使用的,但是您给出的示例是处理将 int 放入包中并放入/获取它,但我不能像这样放置动态 ImageButton ` ab=new ImageB ab.setImageResource(R.drawable.adaba);,ab.setBackgroundColor(Color.TRANSPARENT);,ab.setLayoutParams(b);ab.setId(i);,ab.getId(); ,ll.addView(ab);'所有的设置
    猜你喜欢
    • 2020-05-18
    • 2014-10-13
    • 1970-01-01
    • 2019-07-31
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多