Как хранить много данных на экране поворота?

Это пример кода для извлечения всего текста между '[' и ']' и сохранения его 2 отдельных массивов (т.е. текст внутри скобок в одном массиве и текст вне скобок в другом массиве)

   function extract_text($string)
   {
    $text_outside=array();
    $text_inside=array();
    $t="";
    for($i=0;$i<strlen($string);$i++)
    {
        if($string[$i]=='[')
        {
            $text_outside[]=$t;
            $t="";
            $t1="";
            $i++;
            while($string[$i]!=']')
            {
                $t1.=$string[$i];
                $i++;
            }
            $text_inside[] = $t1;

        }
        else {
            if($string[$i]!=']')
            $t.=$string[$i];
            else {
                continue;
            }

        }
    }
    if($t!="")
    $text_outside[]=$t;

    var_dump($text_outside);
    echo "\n\n";
    var_dump($text_inside);
  }

Вывод: extract_text («привет, как дела?»); будет генерировать:

array(1) {
  [0]=>
  string(18) "hello how are you?"
}

array(0) {
}

extract_text («привет [http://www.google.com/test.mp3] как вы?»); будет производить

array(2) {
  [0]=>
  string(6) "hello "
  [1]=>
  string(13) " how are you?"
}


array(1) {
  [0]=>
  string(30) "http://www.google.com/test.mp3"
}
1
задан Fantômas 18 January 2019 в 17:23
поделиться

1 ответ

@krupesh Anadkat Я, как новичок, разочарован, но @CommonsWare - опытный разработчик, который был в игре уже несколько дней.

Следуйте его советам и убедитесь, что вы изучили основные принципы, которые он обрисовал, а не прорвались или просто торопились что-то построить ради этого.

Тем не менее, сегодня ваш счастливый день, поэтому я побалую вас некоторыми фрагментами кода (нам, тысячелетним программистам, это легко - да, я сказал это !!!), читайте о детях и учитесь.

Проблема, с которой вы здесь сталкиваетесь, заключается в изменении конфигурации устройства .

В вашем случае ориентация экрана изменится.

Каждый раз, когда пользователь поворачивает этот экран, Android OS воссоздает вашу активность по-новому. Android OS означает, что нет ничего плохого в том, что она просто пытается быть эффективной, поскольку она проверяет, есть ли лучшие ресурсы для этой новой ориентации, и если да, то может использовать их вместо этого.

Это источник твоей боли. Теперь давай взломаем и поможем тебе, приятель.

Вы можете использовать методы класса Activity , чтобы выбраться из этого. До того как всемогущая ОС Android убьет вашу активность, в жизненном цикле вашей деятельности будет вызван метод onSaveInstanceState () . В вашем классе вы переопределяете onSaveInstanceState () и сохраняете нужные данные в Bundle , который onSaveInstanceState () принимает в качестве аргумента.

Затем в функции onCreate () вашей активности вы проверяете, не является ли saveInstanceState нулевым, если оно не равно нулю, вы получаете свои данные.

1111 Осторожно, хотя; Лучше всего сохранить примитивные типы данных в Bundle или объекты, которые сериализуемы , чтобы избежать извлечения данных, которые устарели, то есть устарели или больше не действительны. [ 1111]

См. Фрагмент кода для моей активности SaveDataAcrossScreenOrientation ниже

package com.demo.android.savedataacrossscreenrotationdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class SaveDataAcrossScreenOrientation extends AppCompatActivity {

    // Key to be used for the key: value pair to be saved to the bundle
    private static final String KEY_GREETING_TEXT = "greeting_text";

    // The text currently displayed to the screen
    private String mCurrentDisplayedText;

    private TextView mGreetingTextView;
    private Button mSpanishButton;

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

        // Get references to the button and textview
        mGreetingTextView = (TextView) findViewById(R.id.greeting_text_view);
        mSpanishButton = (Button) findViewById(R.id.change_greeting_button);

        // If mCurrentDisplayedText is inside the bundle retrieve and display it on screen
        if(savedInstanceState != null) {
            mCurrentDisplayedText = savedInstanceState.getString(KEY_GREETING_TEXT, "");
            if (mCurrentDisplayedText != "") {
                mGreetingTextView.setText(mCurrentDisplayedText);
            }
        }

        // Set a listener on the spanish button
        mSpanishButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Change the english text to spanish when the button is clicked
                mGreetingTextView.setText(R.string.spanish_greeting);

                // Get the text currently shown in the text view
                mCurrentDisplayedText = (String) mGreetingTextView.getText(); // Calling getText() returns a CharSequence cast it to a string
            }
        });
    }

    // Override onSaveInstanceState(Bundle savedInstanceState) and save mCurrentDisplayedText to the bundle
    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        savedInstanceState.putString(KEY_GREETING_TEXT, mCurrentDisplayedText);
    }

}

Смотрите демонстрацию видео здесь

Веселитесь!

0
ответ дан mtotoWamkwe 18 January 2019 в 17:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: