Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Выбор начальной Activity экрана

Здравствуйте.Имеется начальный шаблон Navigation Drawer. Каждый Item из NavigationView вызывает определенный фрагмент Layout.Как сделать так, чтобы при первом запуске приложения показывался не layout главного экрана, а например layout первого элемента из выдвигающейся шторки?
Ответ: OlegJV, Спасибо.
Вопрос: Пустая Basic Activity

Android studio 2.3.1. При добавлении новой активити в визарде, после выбора Basic Activity генерируются файлы без разметки. При этом другие шаблоны генерируются нормально. Как это исправить, господа?

activity_main.xml
XML
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.#####.###.MainActivity">
 
</android.support.constraint.ConstraintLayout>
MainActivity.java
Java
1
2
3
4
5
6
7
8
9
public class MainActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
}
Ответ: все там генерируется нормально
Вопрос: Работа с фонами блокировки экрана

всем привет!
помогите пожалуйста, на галакси 3, в экране блокировки устанавливается обои только те которые у самому телефона, или другие, только вместе: начальная страница + экран блокировки. т.е. отдельно экран блокировки с галереи ничего не устанавливается а с обоев на выбор ( только их всего 4)!
Ответ: Так для альтернативных штатный нужно ОТРУБИТЬ ПОЛНОСТЬЮ... Ну и с 4.4 опять всё черезжопили как было в 2.2->2.3 с 2g/3g, так что там всё очень по разному. В 70% есть банально мод фреймворка на определённые прошивки, заменяющие штатный экран или отрубающие.
Вопрос: TabHost, Activity, кнопка обновить на MainActivity

Здравствуйте!
Надеюсь вы мне поможете!
Структура программы:
MainActivity, сверху заголовок программы, два Item-а основного меню (обновить, настройки), TabHost.
При запуске в Tabhost создаются 2 вкладки и привязываются 2 класса как содержимое вкладок.
На первой кладке Listview (до второй еще не дошел), при создании вкладки Listview заполняется.
Заполняется через AsyncTask (запрос на сайт, парсинг JSON)...

Сейчас у меня стоит задача отработать кнопку обновления данных.

Т.е. у меня не получается обратиться к ListView-у из MainActivity (на нем расположена кнопка "Обновить" в main_menu), который расположен в другом activity на вкладке TabHost.

Возможно я изначально не правильно сделал архитектуру приложения. Конечно я могу сделать кнопку "обновить" для каждой вкладки по отдельности, но мне кажется это будет не красиво.

Подскажите правильный путь...

Вот MainActivity:

Код

package com.example.user.myapplication;

import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONArray;

import android.app.LocalActivityManager;
import android.app.TabActivity;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.SimpleAdapter;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedReader;

import java.io.InputStream;
import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;


public class MainActivity extends AppCompatActivity {

    public static String LOG_TAG = "my_log";
    private ArrayList<HashMap<String, Object>> mCatList;
    private static final String TITLE = "catname"; // Верхний текст
    private static final String DESCRIPTION = "description"; // ниже главного
    private static final String ICON = "icon";  // будущая картинка

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);





        TabHost tabHost = (TabHost) findViewById(R.id.tabHost);
        Log.d(LOG_TAG, "Setup");

        LocalActivityManager mLocalActivityManager = new LocalActivityManager(this, false);
        //setup(mLocalActivityManager);
        mLocalActivityManager.dispatchCreate(savedInstanceState);
        tabHost.setup(mLocalActivityManager);
        TabHost.TabSpec spec;
        Log.d(LOG_TAG, "TabSpec spec");
        spec = tabHost.newTabSpec("tag1");
        Log.d(LOG_TAG, "setContent");

        spec.setContent(new Intent(this,atmActivity.class));


        Log.d(LOG_TAG, "setIndicator");
        spec.setIndicator("TAB 1");
        Log.d(LOG_TAG, "addTab");
        tabHost.addTab(spec);

        Log.d(LOG_TAG, "TabSpec spec");
        spec = tabHost.newTabSpec("tag2");
        Log.d(LOG_TAG, "setContent");

        //spec.setContent(R.id.tab2);

        spec.setContent(new Intent(this,iptActivity.class));
        Log.d(LOG_TAG, "setIndicator");
        spec.setIndicator("TAB 2");
        Log.d(LOG_TAG, "addTab");
        tabHost.addTab(spec);

        tabHost.setCurrentTab(0);


       // new ParseTask().execute();
    }
        private class ParseTask extends AsyncTask<Void, Void, String> {

            HttpURLConnection urlConnection = null;
            BufferedReader reader = null;
            String resultJson = "";

            @Override
            protected String doInBackground(Void... params) {
                // получаем данные с внешнего ресурса
                try {
                    Log.d(LOG_TAG,"получаем данные с внешнего ресурса");
                    URL url = new URL("_Здесь URL, получаю JSON данные_");

                    urlConnection = (HttpURLConnection) url.openConnection();
                    urlConnection.setRequestMethod("GET");
                    urlConnection.connect();

                    InputStream inputStream = urlConnection.getInputStream();
                    StringBuffer buffer = new StringBuffer();

                    reader = new BufferedReader(new InputStreamReader(inputStream));

                    String line;
                    while ((line = reader.readLine()) != null) {
                        buffer.append(line);
                    }
                    Log.d(LOG_TAG,"Получили данные");
                    resultJson = buffer.toString();

                } catch (Exception e) {
                    e.printStackTrace();
                }
                return resultJson;
            }

            @Override
            protected void onPostExecute(String strJson) {
                super.onPostExecute(strJson);
                // выводим целиком полученную json-строку
                Log.d(LOG_TAG, strJson);

                JSONObject dataJsonObj = null;


                try {
                    dataJsonObj = new JSONObject(strJson);
                    JSONArray atms = dataJsonObj.getJSONArray("atm");

                    ListView iptlist = (ListView) findViewById(R.id.iptlist);

                    mCatList = new ArrayList<HashMap<String, Object>>();
                    HashMap<String, Object> hm;



                  
                    for (int i = 0; i < atms.length(); i++) {
                        JSONObject atm = atms.getJSONObject(i);

                        hm = new HashMap<>();
                        hm.put(TITLE, atm.getString("ATMID")+" "+atm.getString("Name")); // Название
                        hm.put(DESCRIPTION, atm.getString("datet")); // Описание

                        if (atm.getString("Status").equals("1")) {
                            hm.put(ICON, R.drawable.circle_green);}
                        else
                        {hm.put(ICON, R.drawable.circle_red);}// Картинка

                        mCatList.add(hm);

                        String Atmid = atm.getString("ATMID");
                        String Atmname = atm.getString("Name");
                        String Status = atm.getString("Status");
                        String Datet = atm.getString("datet");

                        Log.d(LOG_TAG, "atmid: " + Atmid);
                        Log.d(LOG_TAG, "atmname: " + Atmname);
                        Log.d(LOG_TAG, "Status: " + Status);
                        Log.d(LOG_TAG, "Datet: " + Datet);
                    }


                    Log.d(LOG_TAG, "SimpleAdapter");
                    SimpleAdapter adapter = new SimpleAdapter(
                            MainActivity.this,
                            mCatList,
                            R.layout.list_item,
                            new String[]{TITLE, DESCRIPTION, ICON},
                            new int[]{R.id.text1, R.id.text2, R.id.img});
                    iptlist.setAdapter(adapter);


                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }


    public void sayHello(View V) throws JSONException {
        Log.d(LOG_TAG,"Пробуем заполнить ListView");



    }

    public void showname(View V) {

        Toast.makeText(getApplicationContext(),
                "", Toast.LENGTH_LONG).show();

    }
    public void showpr(View V) throws JSONException {

    }





 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
     getMenuInflater().inflate(R.menu.menu_main, menu);
     return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.item1: {
                //Кнопка обновления
                Log.d(LOG_TAG,"Кнопка обновления");
                


ВОТ ТУТ не могу получить ListView, который находится на atmActivity
                





            }
                return true;

            case R.id.item2:
                Toast.makeText(getApplicationContext(),
                        "", Toast.LENGTH_LONG).show();
                return true;
        }


        return super.onOptionsItemSelected(item);
    }
}



 

Заранее спасибо!

Ответ:
Здравствуйте!
Надеюсь вы мне поможете!
Структура программы:
MainActivity, сверху заголовок программы, два Item-а основного меню (обновить, настройки), TabHost.
При запуске в Tabhost создаются 2 вкладки и привязываются 2 класса как содержимое вкладок.
На первой кладке Listview (до второй еще не дошел), при создании вкладки Listview заполняется.
Заполняется через AsyncTask (запрос на сайт, парсинг JSON)...

Сейчас у меня стоит задача отработать кнопку обновления данных.

Т.е. у меня не получается обратиться к ListView-у из MainActivity (на нем расположена кнопка "Обновить" в main_menu), который расположен в другом activity на вкладке TabHost.

Возможно я изначально не правильно сделал архитектуру приложения. Конечно я могу сделать кнопку "обновить" для каждой вкладки по отдельности, но мне кажется это будет не красиво.

Подскажите правильный путь...

Вот MainActivity:

Код

package com.example.user.myapplication;

import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONArray;

import android.app.LocalActivityManager;
import android.app.TabActivity;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.SimpleAdapter;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedReader;

import java.io.InputStream;
import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;


public class MainActivity extends AppCompatActivity {

    public static String LOG_TAG = "my_log";
    private ArrayList<HashMap<String, Object>> mCatList;
    private static final String TITLE = "catname"; // Верхний текст
    private static final String DESCRIPTION = "description"; // ниже главного
    private static final String ICON = "icon";  // будущая картинка

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);





        TabHost tabHost = (TabHost) findViewById(R.id.tabHost);
        Log.d(LOG_TAG, "Setup");

        LocalActivityManager mLocalActivityManager = new LocalActivityManager(this, false);
        //setup(mLocalActivityManager);
        mLocalActivityManager.dispatchCreate(savedInstanceState);
        tabHost.setup(mLocalActivityManager);
        TabHost.TabSpec spec;
        Log.d(LOG_TAG, "TabSpec spec");
        spec = tabHost.newTabSpec("tag1");
        Log.d(LOG_TAG, "setContent");

        spec.setContent(new Intent(this,atmActivity.class));


        Log.d(LOG_TAG, "setIndicator");
        spec.setIndicator("TAB 1");
        Log.d(LOG_TAG, "addTab");
        tabHost.addTab(spec);

        Log.d(LOG_TAG, "TabSpec spec");
        spec = tabHost.newTabSpec("tag2");
        Log.d(LOG_TAG, "setContent");

        //spec.setContent(R.id.tab2);

        spec.setContent(new Intent(this,iptActivity.class));
        Log.d(LOG_TAG, "setIndicator");
        spec.setIndicator("TAB 2");
        Log.d(LOG_TAG, "addTab");
        tabHost.addTab(spec);

        tabHost.setCurrentTab(0);


       // new ParseTask().execute();
    }
        private class ParseTask extends AsyncTask<Void, Void, String> {

            HttpURLConnection urlConnection = null;
            BufferedReader reader = null;
            String resultJson = "";

            @Override
            protected String doInBackground(Void... params) {
                // получаем данные с внешнего ресурса
                try {
                    Log.d(LOG_TAG,"получаем данные с внешнего ресурса");
                    URL url = new URL("_Здесь URL, получаю JSON данные_");

                    urlConnection = (HttpURLConnection) url.openConnection();
                    urlConnection.setRequestMethod("GET");
                    urlConnection.connect();

                    InputStream inputStream = urlConnection.getInputStream();
                    StringBuffer buffer = new StringBuffer();

                    reader = new BufferedReader(new InputStreamReader(inputStream));

                    String line;
                    while ((line = reader.readLine()) != null) {
                        buffer.append(line);
                    }
                    Log.d(LOG_TAG,"Получили данные");
                    resultJson = buffer.toString();

                } catch (Exception e) {
                    e.printStackTrace();
                }
                return resultJson;
            }

            @Override
            protected void onPostExecute(String strJson) {
                super.onPostExecute(strJson);
                // выводим целиком полученную json-строку
                Log.d(LOG_TAG, strJson);

                JSONObject dataJsonObj = null;


                try {
                    dataJsonObj = new JSONObject(strJson);
                    JSONArray atms = dataJsonObj.getJSONArray("atm");

                    ListView iptlist = (ListView) findViewById(R.id.iptlist);

                    mCatList = new ArrayList<HashMap<String, Object>>();
                    HashMap<String, Object> hm;



                  
                    for (int i = 0; i < atms.length(); i++) {
                        JSONObject atm = atms.getJSONObject(i);

                        hm = new HashMap<>();
                        hm.put(TITLE, atm.getString("ATMID")+" "+atm.getString("Name")); // Название
                        hm.put(DESCRIPTION, atm.getString("datet")); // Описание

                        if (atm.getString("Status").equals("1")) {
                            hm.put(ICON, R.drawable.circle_green);}
                        else
                        {hm.put(ICON, R.drawable.circle_red);}// Картинка

                        mCatList.add(hm);

                        String Atmid = atm.getString("ATMID");
                        String Atmname = atm.getString("Name");
                        String Status = atm.getString("Status");
                        String Datet = atm.getString("datet");

                        Log.d(LOG_TAG, "atmid: " + Atmid);
                        Log.d(LOG_TAG, "atmname: " + Atmname);
                        Log.d(LOG_TAG, "Status: " + Status);
                        Log.d(LOG_TAG, "Datet: " + Datet);
                    }


                    Log.d(LOG_TAG, "SimpleAdapter");
                    SimpleAdapter adapter = new SimpleAdapter(
                            MainActivity.this,
                            mCatList,
                            R.layout.list_item,
                            new String[]{TITLE, DESCRIPTION, ICON},
                            new int[]{R.id.text1, R.id.text2, R.id.img});
                    iptlist.setAdapter(adapter);


                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }


    public void sayHello(View V) throws JSONException {
        Log.d(LOG_TAG,"Пробуем заполнить ListView");



    }

    public void showname(View V) {

        Toast.makeText(getApplicationContext(),
                "", Toast.LENGTH_LONG).show();

    }
    public void showpr(View V) throws JSONException {

    }





 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
     getMenuInflater().inflate(R.menu.menu_main, menu);
     return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.item1: {
                //Кнопка обновления
                Log.d(LOG_TAG,"Кнопка обновления");
                


ВОТ ТУТ не могу получить ListView, который находится на atmActivity
                





            }
                return true;

            case R.id.item2:
                Toast.makeText(getApplicationContext(),
                        "", Toast.LENGTH_LONG).show();
                return true;
        }


        return super.onOptionsItemSelected(item);
    }
}



 

Заранее спасибо!

Вопрос: Жизненный цикл Activity и Fragment при повороте

Ребят запутался я совсем. Помогите разобраться.
Насколько я знаю при повороте удаляется активити, а соответственно все размещенные на ней фрагменты.
У меня на активити фрагменты выставляются в FragmentPagerAdapter'ом

При помощи точек останова я отследил вот что:
при первом запуске:
1) в активити - onCreate (в нем создается FragmentPagerAdapter в котором создаются объект фрагмента)
2) во фрагменте - onCreate
3) во фрагменте - onCreateView

Все вроде замечательно...
Поворачиваем экран.
1) во фрагменте - onDestroy
2) во фрагменте - onCreate
3) в активити - onCreate
4) во фрагменте - onCreateView

Вот тут то я и встал ... почему 3 пункт был после 2???
Посмотрел везде по жизненным циклам сначала создается Активити. И при уничтожении активити (а это при получается при повороте) уничтожаются и все фрагменты приаттаченные к нему.

Надеюсь на вашу помощь.
Спасибо.

Добавлено через 1 час 50 минут
В продолжение темы сделал отдельный проект.. с записями на каждое действие:

Запустил....
03-15 16:47:19.038 20042-20042/ru.ant.lifecycletest D/myLogs: Activity onCreate
03-15 16:47:19.038 20042-20042/ru.ant.lifecycletest D/myLogs: Adapter init
03-15 16:47:19.044 20042-20042/ru.ant.lifecycletest D/myLogs: Activity onStart
03-15 16:47:19.045 20042-20042/ru.ant.lifecycletest D/myLogs: Activity onResume
03-15 16:47:19.083 20042-20042/ru.ant.lifecycletest D/myLogs: Adapter getItem
03-15 16:47:19.085 20042-20042/ru.ant.lifecycletest D/myLogs: Fragment onAttach
03-15 16:47:19.085 20042-20042/ru.ant.lifecycletest D/myLogs: Fragment onCreate
03-15 16:47:19.087 20042-20042/ru.ant.lifecycletest D/myLogs: Fragment onCreateView

----------------------
Перевернул.....
03-15 16:47:28.265 20042-20042/ru.ant.lifecycletest D/myLogs: Fragment onPause
03-15 16:47:28.265 20042-20042/ru.ant.lifecycletest D/myLogs: Activity onPause
03-15 16:47:28.269 20042-20042/ru.ant.lifecycletest D/myLogs: Activity onSaveInstanceState
03-15 16:47:28.269 20042-20042/ru.ant.lifecycletest D/myLogs: Fragment onStop
03-15 16:47:28.269 20042-20042/ru.ant.lifecycletest D/myLogs: Activity onStop
03-15 16:47:28.269 20042-20042/ru.ant.lifecycletest D/myLogs: Fragment onDestroyView
03-15 16:47:28.272 20042-20042/ru.ant.lifecycletest D/myLogs: Fragment onDestroy
03-15 16:47:28.272 20042-20042/ru.ant.lifecycletest D/myLogs: Fragment onDetach
03-15 16:47:28.272 20042-20042/ru.ant.lifecycletest D/myLogs: Activity onDestroy
03-15 16:47:28.324 20042-20042/ru.ant.lifecycletest D/myLogs: Fragment onAttach
03-15 16:47:28.324 20042-20042/ru.ant.lifecycletest D/myLogs: Fragment onCreate

03-15 16:47:28.339 20042-20042/ru.ant.lifecycletest D/myLogs: Activity onCreate
03-15 16:47:28.339 20042-20042/ru.ant.lifecycletest D/myLogs: Adapter init
03-15 16:47:28.347 20042-20042/ru.ant.lifecycletest D/myLogs: Fragment onCreateView
03-15 16:47:28.347 20042-20042/ru.ant.lifecycletest D/myLogs: Activity onStart
03-15 16:47:28.348 20042-20042/ru.ant.lifecycletest D/myLogs: Activity onRestoreInstanceState
03-15 16:47:28.349 20042-20042/ru.ant.lifecycletest D/myLogs: Activity onResume

Выделил красным... Почему? Если мы видим выше что Фрагмент уничтожен, активити уничтожено... Как мертвый фрагмент прицепляется и запускает метод onCreate?? Причем посмотрел что передает в параметре типа Context в onAttach, там передается уже другой объект активити.

Добавлено через 12 минут
PS При этом если выйти из приложения кнопкой назад . а потом заново зайти будет как будто запустил заново приложение.
Ответ: Вот такая ситуация если поставить лог до супер в onCreate в активити. Тут вообще мрак ... onResume вылезает до onCreate. Причем 2 раза ) И все равно создание фрагмента вылезает вперед даже СуперКласса onCreate у активити...

03-16 11:44:18.617 7370-7370/ru.ant.lifecycletest D/myLogs: Activity onResume
03-16 11:44:18.683 7370-7370/ru.ant.lifecycletest D/myLogs: Activity onCreate
03-16 11:44:18.683 7370-7370/ru.ant.lifecycletest D/myLogs: Adapter init
03-16 11:44:18.688 7370-7370/ru.ant.lifecycletest D/myLogs: Activity onStart
03-16 11:44:18.690 7370-7370/ru.ant.lifecycletest D/myLogs: Activity onResume
03-16 11:44:18.728 7370-7370/ru.ant.lifecycletest D/myLogs: Adapter getItem
03-16 11:44:18.729 7370-7370/ru.ant.lifecycletest D/myLogs: Fragment onAttach
03-16 11:44:18.729 7370-7370/ru.ant.lifecycletest D/myLogs: Fragment onCreate
03-16 11:44:18.730 7370-7370/ru.ant.lifecycletest D/myLogs: Fragment onCreateView
03-16 11:44:18.731 7370-7370/ru.ant.lifecycletest D/myLogs: Fragment onActivityCreated
перевернул
03-16 11:44:34.772 7370-7370/ru.ant.lifecycletest D/myLogs: Fragment onPause
03-16 11:44:34.772 7370-7370/ru.ant.lifecycletest D/myLogs: Activity onPause
03-16 11:44:34.804 7370-7370/ru.ant.lifecycletest D/myLogs: Activity onSaveInstanceState
03-16 11:44:34.805 7370-7370/ru.ant.lifecycletest D/myLogs: Fragment onStop
03-16 11:44:34.805 7370-7370/ru.ant.lifecycletest D/myLogs: Activity onStop
03-16 11:44:34.805 7370-7370/ru.ant.lifecycletest D/myLogs: Fragment onDestroyView
03-16 11:44:34.805 7370-7370/ru.ant.lifecycletest D/myLogs: Fragment onDestroy
03-16 11:44:34.805 7370-7370/ru.ant.lifecycletest D/myLogs: Fragment onDetach
03-16 11:44:34.805 7370-7370/ru.ant.lifecycletest D/myLogs: Activity onDestroy
03-16 11:44:34.819 7370-7370/ru.ant.lifecycletest D/myLogs: Activity onResume
03-16 11:44:34.821 7370-7370/ru.ant.lifecycletest D/myLogs: Fragment onAttach
03-16 11:44:34.821 7370-7370/ru.ant.lifecycletest D/myLogs: Fragment onCreate
03-16 11:44:34.839 7370-7370/ru.ant.lifecycletest D/myLogs: Activity onCreate
03-16 11:44:34.839 7370-7370/ru.ant.lifecycletest D/myLogs: Adapter init
03-16 11:44:34.842 7370-7370/ru.ant.lifecycletest D/myLogs: Fragment onCreateView
03-16 11:44:34.842 7370-7370/ru.ant.lifecycletest D/myLogs: Fragment onActivityCreated
03-16 11:44:34.842 7370-7370/ru.ant.lifecycletest D/myLogs: Activity onStart
03-16 11:44:34.843 7370-7370/ru.ant.lifecycletest D/myLogs: Activity onRestoreInstanceState
03-16 11:44:34.844 7370-7370/ru.ant.lifecycletest D/myLogs: Activity onResume

Добавлено через 9 часов 19 минут
Вообщем кажется я нашел преступничка, господа
Это FragmentPagerAdapter шалит и при повороте без ведома создает автоматом новые фрагменты, без прохождения процедуры инициализации.
Вот с такой же проблемой



Вот это
Java
1
FragmentPageAdapter.getItem(int position)
Заменил на это:
Java
1
FragmentPageAdapter.instantiateItem(GroupView view, int position)
При этом получает объект реально установленного фрагмента

Может кому пригодится
Вопрос: При попытке открыть второй и третий Activity происходит завершение работы программы

Подскажите где ошибка. В программирование андроида пару дней. При попытке открыть второй и третий Activity происходит завершение работы программы.
Activity_main
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.myapplication3.MainActivity">
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="@string/text1"
        android:id="@+id/textView"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
 
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:layout_below="@+id/textView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/linearLayout">
 
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="150dp">
 
            <LinearLayout
                android:orientation="vertical"
                android:layout_width="180dp"
                android:layout_height="match_parent">
 
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:text="@string/text2"
                    android:id="@+id/textView2" />
 
                <ImageButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/imageButton"
                    android:src="@drawable/otkl"
                    android:contentDescription="@string/butt1" />
 
            </LinearLayout>
 
            <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
 
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:text="@string/text3"
                    android:id="@+id/textView3" />
 
                <ImageButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/imageButton2"
                    android:src="@drawable/otkl"
                    android:contentDescription="@string/butt2" />
 
            </LinearLayout>
        </LinearLayout>
 
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="150dp">
 
            <LinearLayout
                android:orientation="vertical"
                android:layout_width="180dp"
                android:layout_height="match_parent">
 
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:text="@string/text4"
                    android:id="@+id/textView4" />
 
                <ImageButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/imageButton3"
                    android:src="@drawable/otkl"
                    android:contentDescription="@string/butt3" />
 
            </LinearLayout>
 
            <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
 
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:text="@string/text6"
                    android:id="@+id/textView5" />
 
                <ImageButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/imageButton4"
                    android:src="@drawable/otkl"
                    android:contentDescription="@string/butt4" />
 
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>
 
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_below="@+id/linearLayout"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/linearLayout2"
        android:weightSum="1">
 
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/text5"
            android:id="@+id/button" />
 
    </LinearLayout>
 
</RelativeLayout>
MainActivity
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.example.myapplication3;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
 
public class MainActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_items,menu);
 
        return true;
    }
 
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
 
        switch (item.getItemId()){
            case R.id.settings1:
                return true;
 
            case R.id.settings2:
                return true;
 
            case R.id.settings3:
                return true;
 
            case R.id.settings4:
                Intent intent = (new Intent(this,Main2Activity.class ));
                startActivity(intent);
                break;
 
            case R.id.settings5:
                startActivity(new Intent(MainActivity.this,Main3Activity.class ));
                return true;
 
        }
 
        return super.onOptionsItemSelected(item);
    }
 
    //выбор меню
 
}
AndroidManifest
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication3">
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".Main3Activity" />
        <activity android:name=".Main2Activity" />
    </application>
 
</manifest>
Ответ: Спасибо за помощь,разобрался дело было в этом,public class Main3Activity extends AppCompatActivity {, сменил на Activity
Вопрос: Как увидеть activity другого приложения через прозрачный фон моего?

Нужно, чтобы под моим приложением было видно другое. Сделал фон моего приложения прозрачным путём добавления android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" в <activity...> в AndroidManifest.xml. Но фон стал чёрным. Возможно он и прозрачный, но под ним видно не другое приложение, а пустой background. Как добиться, чтобы там стало видно activity другого приложения, или лончер, если другое приложение не запущено?
Ответ: styles.xml вообще отсутствует

к Qt этот вопрос не имеет отношения - фон непрозрачный ВНЕ окна приложения (оно меньше экрана), а там Qt вообще никак не работает, там прерогатива ОС

Добавлено через 21 минуту
Не... всё-таки виноват Qt. Заметил, что при запуске приложения экран стал мигать - на долю секунды видно нижнее активити. Потом он закрашивается чёрным. И этот чёрный - цвет фона главного окна Qt-приложения. Оказывается, в Android оно всегда на развёрнуто полный экран. Android делает приложение прозрачным, но Qt почему-то закрашивает, хотя в нём заданы прозрачности везде, где нужно.

Добавлено через 1 час 10 минут
РЕШЕНО!
В main()
C++ (Qt)
1
2
3
4
5
    MainWindow w;
    QPalette p;
    p.setColor(QPalette::Background, QColor(0,0,0,0));
    w.setPalette(p);
    w.show();
и конечно надо задать тему с прозрачностью в AndroidManifest.xml.
Вопрос: Динамический интерфейс, восстановление Activity

Как восстановить переменную при возврате в активность.(варианты с записью в файл или БД пока не рассматриваются, интересен базовый функционал)

При вращении экрана активность создается в соответствии с реализованным SQL запросом.
отрабатывают методы:
10-22 16:49:26.012 16758-16758/com.example.funktion D/Проверка﹕ onPause
10-22 16:49:26.022 16758-16758/com.example.funktion D/Проверка﹕ onSaveInstanceState
10-22 16:49:26.022 16758-16758/com.example.funktion D/Проверка﹕ onStop
10-22 16:49:26.022 16758-16758/com.example.funktion D/Проверка﹕ onDestroy
10-22 16:49:26.054 16758-16758/com.example.funktion D/Проверка﹕ onStart
10-22 16:49:26.062 16758-16758/com.example.funktion D/Проверка﹕ onRestoreInstanceState
в случае если перехожу в новую активность
10-22 16:53:38.646 16758-16758/com.example.funktion D/Проверка﹕ onPause
10-22 16:53:38.887 16758-16758/com.example.funktion D/Проверка﹕ onSaveInstanceState
10-22 16:53:38.887 16758-16758/com.example.funktion D/Проверка﹕ onStop
судя по последовательности необходимые данные сохраняются, но при возврате
10-22 16:54:21.247 16758-16758/com.example.funktion D/Проверка﹕ onDestroy
10-22 16:54:21.247 16758-16758/com.example.funktion D/Проверка﹕ onStart
не вызывается метод onRestoreInstanceState.



Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
public class MainActivity extends Activity {
    private static final String TAG = "Проверка";
    public final static String EXTRA_MESSAGE ="com.example.funktion.MESSAGE";
    private ArrayList<String> MyList;
    {
        MyList = new ArrayList<String>();
    }
    ListView mList;
    String mMessage;
    EditText meditText;
    DatabaseHelper sqlHelper;
    Cursor userCursor = null;
         /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        setContentView(R.layout.activity_main);
        mList=(ListView)findViewById(R.id.listView);
        meditText= (EditText) findViewById(R.id.edit_message);
        mMessage = meditText.getText().toString();
 
    }
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
    }
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause");
    }
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG, "onRestart");
    }
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        mMessage=savedInstanceState.getString("count");
        Log.d(TAG, "onRestoreInstanceState");
    }
    protected void onResume() {
        super.onResume();
        SQL(mMessage);
        Log.d(TAG, "onResume ");
    }
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("count",mMessage);
        Log.d(TAG, "onSaveInstanceState");
    }
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart");
    }
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop");
    }
   @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
 
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
 
        return super.onOptionsItemSelected(item);
    }
    public void sendMessage(View view)  {
         mMessage = meditText.getText().toString();
         SQL(mMessage);
   }
    ListView SQL(String mMessage){
        sqlHelper=new DatabaseHelper(this);
        sqlHelper = new DatabaseHelper(getApplicationContext());
        sqlHelper.create_db();
        MyList.clear();
        if (mMessage.length()==0) {
            Toast toast = Toast.makeText(getApplicationContext(),
                    "Введите RAS статус", Toast.LENGTH_SHORT);
            toast.show();
        }
        else {
 
 
            try {
 
                sqlHelper.open();
                String query = " SELECT * FROM " + DatabaseHelper.TABLE +
                        " Where " + DatabaseHelper.COLUMN_E_CODE + " LIKE " + " '%" + mMessage + "%' ";
               // Log.i(TAG, "Значение из массива mMessage из SQL  " + mMessage);
 
                userCursor = sqlHelper.database.rawQuery(query, null);
                int sql=userCursor.getCount();
 
                // Log.i(TAG, "String.valueOf(userCursor.getCount())"+String.valueOf(userCursor.getCount()) );
                //Log.i(TAG,""+ sql );
 
 
 
                if(sql == 0){
                    Toast toast = Toast.makeText(getApplicationContext(),
                            "Вы ввели какую то Х...", Toast.LENGTH_SHORT);
                    toast.show();
 
                }
                else if (sql ==1) {
                    userCursor.moveToFirst();
                    MyList.add(" COLUMN_ID:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_ID)));
                    MyList.add(" COLUMN_E_CODE:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_E_CODE)));
                    MyList.add(" COLUMN_E_MESSAGE:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_E_MESSAGE)));
                    MyList.add(" COLUMN_DETECT:  " +userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_DETECT)));
                    MyList.add(" COLUMN_CHECK:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_CHECK)));
                    MyList.add(" COLUMN_MOTOR:  " +userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_MOTOR)));
                    MyList.add(" COLUMN_SENSOR:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_SENSOR)));
                    MyList.add(" COLUMN_ROOT_CHECK:  " +userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_ROOT_CHECK)));
                    MyList.add(" COLUMN_RESOL:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_RESOL)));
 
                }
                else if (sql>1) {
                    while (userCursor.moveToNext())
                    {
                        MyList.add(" COLUMN_ID:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_ID)));
                        MyList.add(" COLUMN_E_CODE:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_E_CODE)));
                        MyList.add(" COLUMN_E_MESSAGE:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_E_MESSAGE)));
                        MyList.add(" COLUMN_DETECT:  " +userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_DETECT)));
                        MyList.add(" COLUMN_CHECK:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_CHECK)));
                        MyList.add(" COLUMN_MOTOR:  " +userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_MOTOR)));
                        MyList.add(" COLUMN_SENSOR:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_SENSOR)));
                        MyList.add(" COLUMN_ROOT_CHECK:  " +userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_ROOT_CHECK)));
                        MyList.add(" COLUMN_RESOL:  " + userCursor.getString(userCursor.getColumnIndex(DatabaseHelper.COLUMN_RESOL)));
                    }
 
                }
                // getListView().setOnItemLongClickListener(this);
                sqlHelper.database.close();
                userCursor.close();
 
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
 
        ArrayAdapter mAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, MyList);
        mList.setAdapter(mAdapter);
        mList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
 
                if (MyList.size() < 10){
                    Intent MyIntent = new Intent(MainActivity.this, ImageSoSO.class);
                    MyIntent.putExtra(EXTRA_MESSAGE, MyList.get(position));
                    startActivity(MyIntent);}
                else {
                    // MyList.clear();
                    Toast toast = Toast.makeText(getApplicationContext(),
                            "Все же утоните запрос", Toast.LENGTH_SHORT);
                    toast.show();
                }
              //  Log.i(TAG, "Значение из массива" + MyList.get(position));
              //  Log.v(TAG, "Запись = " + position + ", id = " + id);
              //  Log.i(TAG, "Значение из массива CREAT" + MyList.size());
           }
        });
        return mList;
    }
}
Ответ: Сделал новую активность(Black Activity от Android Studio) на ней все заработало.
Проверил в майнфесте у активности с которой криво проходил возврат стоял родитель MainActivity(моя основная) может как то с этим было связанно или эмулятор глючил.

В второй активности планируется показывать конкретный датчик на которой ругается контроллер, вот тут на данном этапе уже каша как это лучше реализовать. Вариантов можно предположить много для решения этой задачи.
1. Организовать справочник слов в соответствии с которыми подгружать соответствующий кусок фото схемы из ресурсов.
2. Загрузить детализированную схему с спецификацией(датчиков с одинаковыми названиями нет) распознавать изображение, выделять координаты на изображении и в результате подсвечивать. Самый крутой вариант, не знаю возможно это или нет.
3. Самое простое загружать большое масштабируемое изображение чтоб человек сам искал расположение датчика, но и это как сделать пока не знаю, минимальный размер изображения на котором можно все найти 1257*1522.


Конечная цель, написать программу с помощью которой человек с улицы сможет легко выявлять неисправность устройство в котором более сотни датчиков оптических пар и прочих гадостей. Сама железка состоит из блоков их всего 10.
Вопрос: Создание Activity в другом Activity

Нормально ли создавать экземпляр какого-либо Activity в текущем Activity? Дело в том, что код, нужный для работы с данными находится в другом Activity. Дублировать код нельзя, противоречит ООП. Да, можно, конечно, создать новый объект и работать с этим объектом, но вопрос не в этом. Вопрос в следующем: нормально ли создавать экземпляр какого-либо Activity в текущем Activity? Не противоречит это каким-либо принципам?
Ответ: dwayne, + к тому что сказал товарищ Паблито, Вы не можете создавать Activity явно, только startActivity
Вопрос: Создание суперкласса для всех Activity

Господа,доброго времени суток!
Возник следующий вопрос: у меня есть несколько активностей(activity1, activity2, activity3), каждая из них содержит по одному фрагменту(fragment1, fragment2, fragment3).
Возможно ли и имеет ли смысл создать некую супер-Activity с фрагментом, наследники которой смогут реализовывать свои специфичные activity+fragment ?
Ответ: Ничего лучше не придумал как создать вот такой вот супер класс для Activity с одним фрагментом.

Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public abstract class BaseActivityWithOneFragment extends FragmentActivity {
 
    Fragment fragment;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(setActivityLayout());
 
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        if (fragment != null) {
        fragment = initFragment();
        fragmentTransaction.add(setContainerForFragment(), fragment, "fragment");
        fragmentTransaction.commit();
        } else {
             Log.d("DEBUG", "В методе initFragment() не проинициализирован объект фрагмента")
        }
    }
    
    /** Класс-наследник должен вернуть разметку для Activity */
    protected abstract int setActivityLayout();
 
    /** Класс-наследник должен вернуть id контейнера,куда поместится фрагмент */
    protected abstract int setContainerForFragment();
 
    /** Класс-наследник должен вернуть объект фрагмента,который будет вешаться на Activity */
    protected abstract Fragment initFragment();