Проверьте причину для метода onResume ()

Я думаю, что это то, что вам нужно:

using System;
using System.Xml.Linq;

class Test
{
    static void Main()
    {
        XNamespace ns = "http://www.acme.com/ABC";
        DateTimeOffset date = new DateTimeOffset(2011, 9, 16, 10, 43, 54, 91,
                                                 TimeSpan.FromHours(1));
        XDocument doc = new XDocument(
            new XElement(ns + "ABC",
                         new XAttribute("xmlns", ns.NamespaceName),
                         new XAttribute(XNamespace.Xmlns + "xsi",
                              "http://www.w3.org/2001/XMLSchema-instance"),
                         new XAttribute("fileName", "acmeth.xml"),
                         new XAttribute("date", date),
                         new XAttribute("origin", "TEST"),
                         new XAttribute("ref", "XX_88888")));

        Console.WriteLine(doc); 
    }
}
1
задан Ahmad Sayed Abdulrahman 15 January 2019 в 21:23
поделиться

2 ответа

Если вы используете startActivityForResult(), то нет необходимости прослушивать вызов onResume(). У него есть метод обратного вызова, в котором вы можете написать код прокрутки в зависимости от вашего состояния.

Например:

Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1); //here 1 is the request code

В вашем SecondActivity установите данные, которые вы хотите вернуть обратно в FirstActivity. Если вы не хотите возвращаться назад, не устанавливайте ничего.

Например: в SecondActivity:

Intent returnIntent = new Intent();
setResult(Activity.RESULT_OK,returnIntent);
finish();

Теперь в своем классе FirstActivity напишите следующий код для метода onActivityResult ().

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1) {
        if(resultCode == Activity.RESULT_OK){
            //case 2
            //Write your code
        }
    }
}
0
ответ дан rafsanahmad007 15 January 2019 в 21:23
поделиться

@ rafsanahmad007 ответ хороший, но если вам действительно нужно использовать onResume(), есть несколько способов приблизиться к нему.

Один из вариантов - установить флаг boolean внутри onActivityResult(), а затем проверить его в onResume():

private boolean returningFromResult = false;

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == FOO) {
        this.returningFromResult = true;
        // ...
    }
}

@Override
protected void onResume() {
    super.onResume();

    if (returningFromResult) {
        // special case
    } else {
        // normal case
    }
}

Другой вариант - проверить внутри onCreate(), есть ли параметр savedInstanceState нулевой. Если это ноль, это означает, что вы запускаете в первый раз. Затем вы можете объединить это с логикой в ​​onResume(), чтобы определить, был ли вызван onResume() более одного раза:

private boolean isFirstOnResume;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    this.isFirstOnResume = (savedInstanceState == null);

    // ...
}

@Override
protected void onResume() {
    super.onResume();

    if (isFirstOnResume) {
        this.isFirstOnResume = false;
        // normal case
    } else {
        // special case
    }
}

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

0
ответ дан Ben P. 15 January 2019 в 21:23
поделиться
Другие вопросы по тегам:

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