0

如果有人可以帮助我解决以下问题,我将不胜感激。

我的 android 应用程序是进行财产调查的问卷。每个活动都与物业的一个元素有关,即厨房、浴室、中央供暖等。应用程序完成后将有大约 50 个问题。每个活动都有三个 Spinner 和两个编辑文本,用户必须使用它们输入与属性相关元素的年龄和状况相关的数据,然后才能进入下一个活动。

我的问题如下:

问题 1 与厨房有关。输入所有相关数据后,我使用意图(通过“下一页”按钮)开始与浴室相关的下一个活动。但是,如果我意识到我在厨房活动的数据输入中出错并通过浴室活动的意图返回(以与我从厨房活动进入浴室活动相同的方式),我之前输入的数据为否更长的时间。

我如何保留这些数据?至关重要的是,我的应用程序用户可以在调查问题之间来回切换并查看他们之前输入的数据。回答完所有 50 个问题后,数据将保存到数据库中,然后可以调查下一个属性。

我已经在互联网和各种书籍中搜索了这个问题的答案,但我遇到了相互矛盾的信息。有人说使用暂停,其他人说停止,其他人说保存实例状态。我很困惑??我已经坚持了三天了,所以非常感谢任何帮助。

下面是厨房活动,然后是浴室活动......

    package com.example.basicview6;

import android.os.Bundle;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;

公共类厨房扩展活动{

// defining the variables that will be displayed on the page
String[] age, renewal, main;
Spinner s1, s2, sMain;
ToggleButton repairs;
EditText repDesc, repCost, quantity;
Button back, next;
TextView life, qty, unit;

// creating the layout from the main xml file
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.kitchen);

    // getting the string array values from the 'strings xml' resources file
    // and applying them to the relevant variable
    age = getResources().getStringArray(R.array.age_array);
    renewal = getResources().getStringArray(R.array.renewal_array);
    main = getResources().getStringArray(R.array.kitchen_array);

    // getting the Spinner widget from the main xml and applying it to the
    // 's1' variable
    s1 = (Spinner) findViewById(R.id.spAge);
    s2 = (Spinner) findViewById(R.id.spRenewal);
    sMain = (Spinner) findViewById(R.id.spKitchen);
    repairs = (ToggleButton) findViewById(R.id.tbRepairs);
    repDesc = (EditText) findViewById(R.id.etRepDesc);
    repCost = (EditText) findViewById(R.id.etRepCost);
    quantity = (EditText) findViewById(R.id.etQuantity);
    back = (Button) findViewById(R.id.bBack);
    next = (Button) findViewById(R.id.bNext);
    life = (TextView) findViewById(R.id.tvLife);
    qty = (TextView) findViewById(R.id.tvQuantity);
    unit = (TextView) findViewById(R.id.tvUnitM);

    life.setVisibility(View.INVISIBLE);
    quantity.setVisibility(View.INVISIBLE);
    qty.setVisibility(View.INVISIBLE);
    unit.setVisibility(View.INVISIBLE);

    /*
     * creating a new 'string type' ArrayAdapter and telling it to display
     * the values of the relevant variable as a simple spinner item
     */
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, age);
    ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, renewal);
    ArrayAdapter<String> adapterM = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, main);

    // priming the s1 Spinner variable for an array item to be selected -
    // standby mode
    s1.setAdapter(adapter);
    s1.setOnItemSelectedListener(new OnItemSelectedListener() {

        // telling the program what to do when an item is selected
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            int index = arg0.getSelectedItemPosition();

        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
        }

    });
    s2.setAdapter(adapter2);
    s2.setOnItemSelectedListener(new OnItemSelectedListener() {

        // telling the program what to do when an item is selected
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            int index = arg0.getSelectedItemPosition();

        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
        }

    });
    sMain.setAdapter(adapterM);
    sMain.setOnItemSelectedListener(new OnItemSelectedListener() {

        // telling the program what to do when an item is selected
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            int index = arg0.getSelectedItemPosition();

        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
        }

    });

    // setting up the OnClickListerner for the repairs toggle button
    repairs.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            if (repairs.isChecked()) {
                repDesc.setVisibility(View.VISIBLE);
                repCost.setVisibility(View.VISIBLE);
            } else {
                repDesc.setVisibility(View.INVISIBLE);
                repCost.setVisibility(View.INVISIBLE);
            }

        }
    });
    // setting up the OnClickListener for the Next button
    next.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent openBathroom = new Intent(
                    "com.example.basicview6.BATHROOM");
            startActivity(openBathroom);

        }
    });

}

}

浴室活动 ...................

包 com.example.basicview6;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;

公共类浴室扩展活动{

// defining the variables that will be displayed on the page
String[] age, renewal, main;
Spinner s1, s2, sMain;
ToggleButton repairs;
EditText repDesc, repCost, quantity;
Button back, next;
TextView life, qty, unit;

// creating the layout from the main xml file
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.bathroom);

    // getting the string array values from the 'strings xml' resources file
    // and applying them to the relevant variable
    age = getResources().getStringArray(R.array.age_array);
    renewal = getResources().getStringArray(R.array.renewal_array);
    main = getResources().getStringArray(R.array.bathroom_array);

    // getting the Spinner widget from the main xml and applying it to the
    // 's1' variable
    s1 = (Spinner) findViewById(R.id.spAge);
    s2 = (Spinner) findViewById(R.id.spRenewal);
    sMain = (Spinner) findViewById(R.id.spBathroom);
    repairs = (ToggleButton) findViewById(R.id.tbRepairs);
    repDesc = (EditText) findViewById(R.id.etRepDesc);
    repCost = (EditText) findViewById(R.id.etRepCost);
    quantity = (EditText) findViewById(R.id.etQuantity);
    back = (Button) findViewById(R.id.bBack);
    next = (Button) findViewById(R.id.bNext);
    life = (TextView) findViewById(R.id.tvLife);
    qty = (TextView) findViewById(R.id.tvQuantity);
    unit = (TextView) findViewById(R.id.tvUnitM);

    life.setVisibility(View.INVISIBLE);
    quantity.setVisibility(View.INVISIBLE);
    qty.setVisibility(View.INVISIBLE);
    unit.setVisibility(View.INVISIBLE);

    /*
     * creating a new 'string type' ArrayAdapter and telling it to display
     * the values of the relevant variable as a simple spinner item
     */
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, age);
    ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, renewal);
    ArrayAdapter<String> adapterM = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, main);

    // priming the s1 Spinner variable for an array item to be selected -
    // standby mode
    s1.setAdapter(adapter);
    s1.setOnItemSelectedListener(new OnItemSelectedListener() {

        // telling the program what to do when an item is selected
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            int index = arg0.getSelectedItemPosition();

        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
        }

    });
    s2.setAdapter(adapter2);
    s2.setOnItemSelectedListener(new OnItemSelectedListener() {

        // telling the program what to do when an item is selected
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            int index = arg0.getSelectedItemPosition();

        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
        }

    });
    sMain.setAdapter(adapterM);
    sMain.setOnItemSelectedListener(new OnItemSelectedListener() {

        // telling the program what to do when an item is selected
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            int index = arg0.getSelectedItemPosition();

        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
        }

    });

    // setting up the OnClickListerner for the repairs toggle button
    repairs.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            if (repairs.isChecked()) {
                repDesc.setVisibility(View.VISIBLE);
                repCost.setVisibility(View.VISIBLE);
            } else {
                repDesc.setVisibility(View.INVISIBLE);
                repCost.setVisibility(View.INVISIBLE);
            }

        }
    });
    // setting up the OnClickListener for the Back button
    back.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent openKitchen = new Intent(
                    "com.example.basicview6.KITCHEN");
            startActivity(openKitchen);

        }
    });

}

}

4

2 回答 2

0

好吧,您可以使用多种不同的方法,这就是为什么您不断看到相互矛盾的答案的原因。但是有一些是首选的。

对于屏幕旋转,这意味着如果设备水平或垂直翻转,您使用onSaveInstanceState.

还有另一种我认为作弊的方法,很多人会告诉你远离,因为它会导致很多错误。然而,这是最简单的方法。只需进入您的清单并放置此行

android:configChanges="orientation|keyboardHidden|screenSize

如果您试图保留信息,以便当您返回时Activity它仍然存在,您应该使用onPause(). 看起来好像您只是在传输简单的数据,如String,int等。这可以SharedPreferences在您的onPause(). 原因是onPause()总是(99% 的时间)在Activity被杀死之前调用,这意味着您将始终保留您的信息。

有关向您展示如何做这些事情的一些视频参考,请转到这里The New Boston
如果您想阅读这里有一些链接

  1. 共享首选项
  2. onPauseonPause
  3. onSaveInstanceState

如果您需要其他任何东西,请询问。

于 2013-06-22T20:55:19.013 回答
0

在活动之间切换时,您可以将额外内容添加到 Intent: putExtra()中,例如:

intent.putExtra(Intent.EXTRA_TEXT, "my saved String");

并通过以下方式让他们进入被调用的活动:

String gottenString = intent.getExtras().getString(Intent.EXTRA_TEXT);

您还可以将数据保存在(临时)文件中:保存文件

于 2013-06-22T21:00:10.470 回答