Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Что делает строка super.onCreate(savedInstanceState)?

подскажите, начинающему программисту под android, что делает строка
super.onCreate(savedInstanceState);
как она работает?
заранее благодарен!
Ответ:
Сообщение от Valakin
что уж там у него в onCreate() не знаю, может кто подскажет как это можно посмотреть.
Вопрос: Подскажите - программа вылетает в OnCreate

Я действительно совершенно безпонятия от чего она это делает! Программа вылетает на super.onCreate(savedInstanceState);
Вот лог ошибки:
12-05 21:42:37.528 30770-30770/spsoft.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: spsoft.myapplication, PID: 30770
java.lang.RuntimeException: Unable to start activity ComponentInfo{spsoft.myapplication/spsoft.passwordgenerator.hhhhh}: java.lang.IllegalStateException: This app has been built with an incorrect configuration. Please configure your build for VectorDrawableCompat.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2385)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2436)
at android.app.ActivityThread.access$800(ActivityThread.java:157)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1374)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5398)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:940)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: This app has been built with an incorrect configuration. Please configure your build for VectorDrawableCompat.
at android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup(AppCompatDrawableManager.java:692)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:186)
at android.support.v7.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:77)
at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:83)
at android.support.v7.app.AppCompatDelegateImplV7.<init>(AppCompatDelegateImplV7.java:146)
at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:28)
at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:41)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:193)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:173)
at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:511)
at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:71)
at spsoft.passwordgenerator.hhhhh.onCreate(hhhhh.java:61)
at android.app.Activity.performCreate(Activity.java:5264)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2349)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2436)*
at android.app.ActivityThread.access$800(ActivityThread.java:157)*
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1374)*
at android.os.Handler.dispatchMessage(Handler.java:110)*
at android.os.Looper.loop(Looper.java:193)*
at android.app.ActivityThread.main(ActivityThread.java:5398)*
at java.lang.reflect.Method.invokeNative(Native Method)*
at java.lang.reflect.Method.invoke(Method.java:515)*
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:940)*
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)*
at dalvik.system.NativeStart.main(Native Method)*
12-05 21:42:39.444 30770-30770/? I/Process: Sending signal. PID: 30770 SIG: 9
Заранее огромное спасибо!
Ответ: не захотело ссылку вставить. копипастну из stackoverflow :

По всей видимости в файл конфигурации модуля приложения build.gradle нужно добавить поддержку VectorDrawable

android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
Так же версия плагина Gradle должна быть не менее 2.x.x (build.gradle всего проекта):

dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
...
}
Вопрос: Передача строки из activity в класс non activity !

Здравствуйте дамы и господа. Очень нужна помощь.

public class Login_ac extends AppCompatActivity {

Button b_login;
Spinner sp_login;
EditText pass_login;
String item_user, name, pass;

String user1 = "Пользователь 1";
String user2 = "Пользователь 2";

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

b_login = (Button)findViewById(R.id.but_login);
pass_login = (EditText)findViewById(R.id.pass_login);



String[] user = {user1,user2};
sp_login = (Spinner)findViewById(R.id.user_login);
ArrayAdapter<String> adapter_user = new ArrayAdapter<String>(this, R.layout.row_login1, user);
adapter_user.setDropDownViewResource(R.layout.row_login2);
sp_login.setAdapter(adapter_user);
AdapterView.OnItemSelectedListener itemSelectedListener = new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

item_user = (String)parent.getItemAtPosition(position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {

}
};
sp_login.setOnItemSelectedListener(itemSelectedListener);

}

public void OnClick_login(View view){
pass = pass_login.getText().toString();
if (item_user.equals("Пользователь 1") && pass.equals("0000")){

item_user="qqq";
name = item_user;

startActivity(new Intent(Login_ac.this,MainActivity.class));

}else {
b_login.setText("введена чушь");
}
}
}

В activity Login_ac выбираем пользователя спинером и пароль edittext'ом
Затем при нажатии кнопки входа переходим в MainActivity, где сразу происходит подключение к базе данных
через простой (не activity) класс ConnectionClass
Также при нажатии кнопки входа в activity Login_ac необходимо передать переменную String name в класс ConnectionClass
для того чтобы подключение к базе произошло под выбранным user1 или user2
Ответ: static String рулит, спасибо +1 (видимо я плохо учил мат.часть java)
ExFau$t также благодарю
Вопрос: Перегрузка OnCreate

Гуру ООП, помогите исправить "конфликт"

Написал свой класс-предок для активити(MyActivity), где в onCreate добавил несколько дополнительных полей для работы с XML и с обработкой ошибки. От него наследую мои "рабочие" активити.

MyActivity наследуется от FragmentActivity
Java
1
2
3
4
    public void onCreate(Bundle savedInstanceState, String err_id, int ContextView_id) {
       super.onCreate(savedInstanceState);
       // дальше мои "доработки"
    }
В рабочем активити делаю так:
Java
1
2
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState, "Error_3924829", R.layout.frm_main);
(так удобнее)

В результате все работает, но в Студии строка public void onCreate(Bundle savedInstanceState) { светится ошибкой!
Среди предложений можно перед public void onCreate(Bundle savedInstanceState) { поставить @SuppressLint("MissingSuperCall")
тогда красный гаснет, но это... подозрительно что-ли... Не знаю как оно поведет себя в разных версиях SDK.

Кто знает, можно ли убрать ошибку еще на уровне предка?
Что означает/делает @SuppressLint("MissingSuperCall")?
Ответ:

Не по теме:

Сообщение от OlegJV
я тут полночи бился
аналогично! я сегодня поисправлял все конфликты которые БЕСИЛИ уже несколько месяцев в нескольких проектах и добавил еще несколько функций в собственную ORM


попробую еще раз! есть КУЧА активити, в которых используется МОЙ предок для активити. У всех много кода в onCreate. Надо ВСЕХ переписать. Благодаря @Deprecated в предке у onCreate я СРАЗУ вижу какое активити надо переписать/перебрать (стоит его открыть) - студия явно показывает ошибку в списке методов и в коде!
Вопрос: Парсинг сайта и кодировка

Добрый день.
Начала изучать вопрос парсинга страниц, наткнулась на тему на хабре
Сделала, вроде, все правильно, но никак не могу разобраться с кодировкой страниц. Вместо русских букв получаю ромбики с вопросами. Пробовала указать кодировку UTF-8 и Windows-1251 -не помогло.
Прикладываю код классов и скрин экрана. Ради примера взята ветка этого форума.
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
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
 
 
import org.htmlcleaner.TagNode;
 
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
public class stackParser extends Activity {
 
   /* @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_stack_parser);
    }*/
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       //setContentView(R.layout.main);
       setContentView(R.layout.activity_stack_parser);
 
       
       Button button = (Button)findViewById(R.id.parse);
     
       button.setOnClickListener(myListener);
   }
 
 
    private ProgressDialog pd;
   
    private View.OnClickListener myListener = new View.OnClickListener() {
        public void onClick(View v) {
           
            pd = ProgressDialog.show(stackParser.this, "Working...", "Connect", true, false);
            
            new ParseSite().execute("http://www.cyberforum.ru/android-dev");
        }
    };
 
    private class ParseSite extends AsyncTask<String, Void, List<String>> {
        
        protected List<String> doInBackground(String... arg) {
            List<String> output = new ArrayList<String>();
            try
            {
                HtmlHelper hh = new HtmlHelper(new URL(arg[0]));
                List<TagNode> links = hh.getLinksByClass("thread_title_1703928");
 
                for (Iterator<TagNode> iterator = links.iterator(); iterator.hasNext();)
                {
                    TagNode divElement = (TagNode) iterator.next();
                    output.add(divElement.getText().toString());
                }
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
            return output;
        }
 
      
        protected void onPostExecute(List<String> output) {
           
            pd.dismiss();
           
            ListView listview = (ListView) findViewById(R.id.listViewData);
            
            listview.setAdapter(new ArrayAdapter<String>(stackParser.this,
                    android.R.layout.simple_list_item_1 , output));
        }
    }
}
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
public class HtmlHelper {
    TagNode rootNode;
 
    //Конструктор
    public HtmlHelper(URL htmlPage) throws IOException
    {
        //Создаём объект HtmlCleaner
        HtmlCleaner cleaner = new HtmlCleaner();
        //Загружаем html код сайта
        rootNode = cleaner.clean(htmlPage);
    }
 
    List<TagNode> getLinksByClass(String CSSClassname)
    {
        List<TagNode> linkList = new ArrayList<TagNode>();
 
        //Выбираем все ссылки
        TagNode linkElements[] = rootNode.getElementsByName("a", true);
        for (int i = 0; linkElements != null && i < linkElements.length; i++)
        {
            //получаем атрибут по имени
            String classType = linkElements[i].getAttributeByName("id");
            //если атрибут есть и он эквивалентен искомому, то добавляем в список
            if (classType != null && classType.equals(CSSClassname))
            {
                linkList.add(linkElements[i]);
            }
        }
 
        return linkList;
    }
}
Ответ: статье сто лет в обед
используй библиотеку
в build.gradle подключается строкой
XML
1
compile 'org.jsoup:jsoup:1.8.3'
примеров на форуме и в сети полно
Вопрос: Не передаются данные между onCreate и onResume

Значение переменной изменяется после загрузки. НО! В onCreate есть TextView который использует это значение. Но судя по размеру текста, оно не изменилось. Помогите пожалуйста!
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
int dendroidMoney = 500;
    int dendroidTextSize = 70;
    SharedPreferences sPref;
    private String SAVE = "777";
 
    @Override
    protected void onResume()
    {
        super.onResume();
        sPref = getSharedPreferences("dendroidOrientation", MODE_PRIVATE);
        String loadedConf = sPref.getString(SAVE, "");
        int portConf = Integer.parseInt(loadedConf);
        sPref = getSharedPreferences("dendroidFontSize", MODE_PRIVATE);
        String loadedFontSize = sPref.getString(SAVE, "");
        int portFontSize = Integer.parseInt(loadedFontSize);
        dendroidTextSize = portFontSize;
        /*if (portConf == 1) {
         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
         }
         else {
         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
         }*/
    }
    
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
 
        super.onCreate(savedInstanceState);
...
TextView ddTitleTextView = new TextView(this);
        ddTitleTextView.setText("The Slot Machine");
        ddTitleTextView.setLayoutParams(dd_wrap_content);
        ddTitleTextView.setTextColor(0xffFFFFFF);
        ddTitleTextView.setTextSize(dendroidTextSize);
Ответ: в onCreate вообще не должно быть ничего кроме findViewById(ля-ля)
остальной код надо выносить в onResume и прочие методы
слушай что тебе сказал YuraAAA, если непонятно что он имел ввиду - перечитай еще раз, он дело говорит
Вопрос: Боковое меню

Всем привет, появилась нужда сделать боковое меню активным при запуске активности, имеющей как раз то самое меню . Есть какой-нибудь метод для этого?
Вот для более ясной картины код, вызывающий меню.
package com.company.myapplication;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.Toast;
import android.view.View.OnClickListener;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;

public class GeometryActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {

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






NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}

@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.openDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}

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

@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);
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();

if (id == R.id.nav_triangle) {
Intent intent = new Intent(GeometryActivity.this, TriangleActivity.class);
startActivity(intent);
} else if (id == R.id.nav_gallery) {
Intent intent = new Intent(GeometryActivity.this, SquareActivity.class);
startActivity(intent);
} else if (id == R.id.nav_slideshow) {

} else if (id == R.id.nav_manage) {

} else if (id == R.id.nav_share) {

} else if (id == R.id.nav_send) {

}

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
}
Ответ: drawer.openDrawer(); в onCreate активности.
Вопрос: Сразу после нажатия Power вызывается OnCreate. Почему?

Здравствуйте. Пишу вообще под Mono.Android, но в той ветке глухо, да и код очень похож на Java, так что это я думаю не проблемма, да и вопрос не в этом. В общем: основное Activity наследуется от TabActivity (знаю, что устарело, но так надо..) В OnCreate, ничего особенного нет, создаются вкладки, загружается ранее сохраненная информация:
Кликните здесь для просмотра всего текста
C#
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
        protected override void OnCreate (Bundle bundle)
        {
            base.OnCreate (bundle);
            this.RequestWindowFeature (WindowFeatures.NoTitle); //Создать вьюху без заголовка
            mSettings =  GetSharedPreferences(APP_PREFERENCES, FileCreationMode.Private);
 
            Load_SharedPreferences();
 
 
            SetContentView(TabHost);
            CreateTab(typeof(Connect_Activity), "Подключение",     GetString(Resource.String.connection));
            CreateTab(typeof(Main_Input_data_Activity), "Главная", GetString(Resource.String.main));
            CreateTab(typeof(Settings_Activity), "Настройки",      GetString(Resource.String.settings) );
            if( LayoutInflater.Inflate(Resource.Layout.Graf_act, null).FindViewById<ImageButton>(Resource.Id.MenuButton)!=null) //если нет кнопки меню у графиков, т.е. запустили на планшете
                CreateTab(typeof(Grafics_Activity), "Графики", GetString(Resource.String.graphics));
            else
                CreateTab(typeof(Grafics_Activity_large), "Графики", GetString(Resource.String.graphics)); //постоянно отображаемая панель меню графиков
 
            Change_TabHost_Text_size ();
 
 
            if(current_tag!="")
            {
                TabHost.SetCurrentTabByTag (current_tag); //выделить ту вкладку, которая была сохранена перед выключением
                current_tag="";
            }
 
            //---произвести загрузку серриализированного класса singletone с введенными пользователем данными
            try
            {
                Serializer.LoadFromBinnary<All_user_entered_info>(System.IO.Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), File_name_user_entered_info));
            }
            catch{}
 
            //экземпляр класса PowerManager.WakeLock  чтоб не гас экран 
            var _powerManager = (PowerManager) GetSystemService(PowerService);
            sWakeLock = _powerManager.NewWakeLock(WakeLockFlags.ScreenBright, "MyTag");
        }
        
        
        
        private void CreateTab(Type activityType, string tag, string label)
        {
            var intent = new Intent(this, activityType);
            intent.AddFlags(ActivityFlags.NewTask);
            var spec = TabHost.NewTabSpec(tag);
            spec.SetIndicator (label); //, drawableIcon);
            spec.SetContent(intent);
            TabHost.AddTab(spec);
        }

В OnPause и OnDestroy, тоже ничего криминального не происходит:
Кликните здесь для просмотра всего текста
C#
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
protected override void OnPause ()
        {
            base.OnPause ();
 
            // Запоминаем данные
            ISharedPreferencesEditor editor = mSettings.Edit();
            editor.PutString(APP_PREFERENCES_LANG, current_lang);
            if(!String.IsNullOrWhiteSpace( Main_Input_data_Activity.Current_Fragment))
                editor.PutString (APP_PREFERENCES_CURRENT_FRAGMENT, Main_Input_data_Activity.Current_Fragment);
            editor.PutString(APP_PREFERENCES_THEME, current_theme);
            if(current_tag!="")
                editor.PutString(APP_PREFERENCES_SELECT_TAB, TabHost.CurrentTabTag);
            editor.Apply ();
 
            //произвести серриализацию класса singletone с введенными пользовательскими данными в файл
            Serializer.SaveToBinnary<All_user_entered_info> (System.IO.Path.Combine (System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal), File_name_user_entered_info), All_user_entered_info.Instance);
        }
 
//выключение BT при завершении приложения
        protected override void OnDestroy ()
        {
            base.OnDestroy ();
 
            if ((My_Bluetooth.mBluetoothAdapter.Enable ()) & (Main_tabs_Activity.restart_flag == false)) //если БТ включен и это выключение, а не перезапуск для смены темы, то
                My_Bluetooth.mBluetoothAdapter.Disable ();
            
            Main_tabs_Activity.restart_flag = false; //отчистить флаг
        }

И всё отлично работает, но как только я нажимаю хардовую кнопку "Power" на тел. (в каком бы Actyvity или фрагменте я не находился) гаснет экран и буквально через пол секунды сам вызывается OnCreate этой, главной активити! Естественно он опять пытается создать табы. И входя в конструктор первой активности-вкладки (класс Connect_Activity) в её SetContentView (Resource.Layout.Connect_act); получаем исключение Android.Content.Res.Resources+NotFoundException. И приложение сыпется... Почему вообще так происходит? Из-за чего вообще может вызыватся OnCreate при погасании экрана?!
Ответ:
в коде создается wakelock
он где в onpause/stop срабатывает? wakeLock.acquire(); например
Он включаеться потом в одном фрагменте, а выключается в другом. Но да это не важно, я думаю. Т.к. я для проверки создал новый проект, в котором 3-класса:
MainActyvity
Кликните здесь для просмотра всего текста
C#
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
[Activity (Label = "Test_TabApp", MainLauncher = true, Icon = "@mipmap/icon",ScreenOrientation= Android.Content.PM.ScreenOrientation.Landscape)]
    public class MainActivity : TabActivity
    {
        
        protected override void OnCreate (Bundle savedInstanceState)
        {
            base.OnCreate (savedInstanceState);
            this.RequestWindowFeature (WindowFeatures.NoTitle); //Создать вьюху без заголовка
 
            SetContentView (TabHost);
            CreateTab(typeof(Connect_Activity), "Подключение",     "Подключение");
            CreateTab(typeof(Main_Input_data_Activity), "Главная", "Главная");
        }
 
 
        private void CreateTab(Type activityType, string tag, string label)  //, int drawableId)
        {
            var intent = new Intent(this, activityType);
            intent.AddFlags(ActivityFlags.NewTask);
            var spec = TabHost.NewTabSpec(tag);
            spec.SetIndicator(label); //, drawableIcon);
            spec.SetContent(intent);
            TabHost.AddTab(spec);
        }
 
 
    }

Connect_Activity
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
[Activity]
    public class Connect_Activity : Activity
    {
        
 
        protected override void OnCreate (Bundle bundle)
        {
            base.OnCreate (bundle);
            SetContentView (Resource.Layout.Connect_act);
        }
            
    }

и Main_Input_data_Activity
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
[Activity]  
    public class Main_Input_data_Activity  : Activity
    {
 
        protected override void OnCreate (Bundle bundle)
        {
            base.OnCreate (bundle);
            SetContentView (Resource.Layout.Input_dat_act);
 
        }
 
    }

В которых нет ничего! И всё равно наблюдаю такой-же эффект! Нажимая power в строке
C#
1
SetContentView (Resource.Layout.Connect_act);
Сразу вижу исключение Android.Content.Res.Resources+NotFoundException
Кликните здесь для просмотра всего текста
Android.Content.Res.Resources+NotFoundException: Resource ID #0x7f030000
at android.content.res.Resources$NotFoundException: Resource ID #0x7f030000
at at android.content.res.Resources.getValue(Resources.java:1163)
at at android.content.res.Resources.loadXmlResourceParser(Resources.java:2349)
at at android.content.res.Resources.getLayout(Resources.java:979)
at at android.view.LayoutInflater.inflate(LayoutInflater.java:395)
at at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:315)
at at android.app.Activity.setContentView(Activity.java:1973)
at at md5c62c62cec7e539e725691719b812cf8e.Connect_Activity.n_onCreate(Native Method)
at at md5c62c62cec7e539e725691719b812cf8e.Connect_Activity.onCreate(Connect_Activity.java:28)
at at android.app.Activity.performCreate(Activity.java:5275)
at at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2166)
at at android.app.ActivityThread.startActivityNow(ActivityThread.java:2040)
at at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135)
at at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347)
at at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:749)
at at android.widget.TabHost.setCurrentTab(TabHost.java:413)
at at android.widget.TabHost.addTab(TabHost.java:240)
at at md5c62c62cec7e539e725691719b812cf8e.MainActivity.n_onCreate(Native Method)
at at md5c62c62cec7e539e725691719b812cf8e.MainActivity.onCreate(MainActivity.java:28)
at at android.app.Activity.performCreate(Activity.java:5275)
at at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2166)
at at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2252)
at at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3757)
at at android.app.ActivityThread.access$900(ActivityThread.java:139)
at at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1206)
at at android.os.Handler.dispatchMessage(Handler.java:102)
at at android.os.Looper.loop(Looper.java:136)
at at android.app.ActivityThread.main(ActivityThread.java:5103)
at at java.lang.reflect.Method.invokeNative(Native Method)
at at java.lang.reflect.Method.invoke(Method.java:515)
at at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
at at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606)
at at dalvik.system.NativeStart.main(Native Method)


Добавлено через 8 минут
Один в один, практически, как в этом примере:

Добавлено через 1 час 8 минут
Нашел в чем беда! Во всём виновата строка
C#
1
ScreenOrientation= Android.Content.PM.ScreenOrientation.Landscape
Убираю её, всё нормально. Тушу экран, возобновляю, всё остается на своих местах, OnCreate не вызывается. Теберь буду думать как это победить, т.к. мне надо, чтобы приложение было только в горизонтальном виде. Если оставляю только папку layout-land, то ругается на SetContentView (Resource.Layout.Main); не видет ресурсы...

Добавлено через 39 минут
Так. Ну вроде разобрался!... Значит получается так: когда программа запущена в портретной ориентации, то нажатие power не вызывает OnCreate и даже все данные остаются на месте. А когда в горизонтальном виде нажимаешь, то OnCreate вызывается и ищет ресурсы в папке layout, а их там у меня нет, они все в папке layout-land - отсюда и исключения. Сейчас перенес все ресурсы из layout-land в layout, из layout-large-land в layout-large и т.д. и оставил
C#
1
ScreenOrientation= Android.Content.PM.ScreenOrientation.Landscape
И всё работает нормально. Вылетать перестало. Теперь осталось придумать как вообще избежать этого перезапуска и почему он возникает только при горизонтальном расположении?! (а то все подключенные по BT устройства отваливаются и их по новой надо подключать, а разруливать это труднее, чем избежать повторного OnCreate, покрайне мери пока мне так кажеться...)
Вопрос: 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);
    }
}



 

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

Вопрос: OnCreate вызывается дважды

Добрый день. Делаю простое приложение, которое при нажатии на кнопку, с помощью Intent должно переходить на следующее активити. Но проблема в том что когда запускается второе активити, метод OnCreate() в нем вызывается дважды.

Код MainActivity:

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
public class MainActivity extends AppCompatActivity{
    public static final String TAG = MainActivity.class.getSimpleName();
 
    public EditText fromWayEdit;
    public EditText toWayEdit;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        setContentView(R.layout.content_main);
 
        fromWayEdit = (EditText) findViewById(R.id.fromWayField);
        toWayEdit = (EditText) findViewById(R.id.toWayField);
 
    }
 
    //При нажатии на кнопку вызывается этот метод, он привязан к кнопке через xml файл
    public void runActivity(View view){
        Intent intent = new Intent(this, ScheduleActivity.class);
        startActivity(intent);
    }
 
}
Код ScheduleActivity который вызывается через Intent

Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class ScheduleActivity extends AppCompatActivity {
 
    public static final String TAG = ScheduleActivity.class.getSimpleName();
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
 
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
 
        Log.d(TAG, "finish");
 
    }
Логи:

Java(TM) 2 Platform Standard Edition 5.0
1
2
3
03-09 19:53:57.602 26657-26657/? D/OpenGLRenderer: Enabling debug mode 0
03-09 19:54:04.342 26657-26657/com.standart.schedule D/ScheduleActivity: finish
03-09 19:54:04.482 26657-26657/com.standart.schedule D/ScheduleActivity: finish
По идеи, когда вызывается ScheduleActivity слово "finish" должно появится в логах только один раз, но у меня оно появляется два раза, как будто onCreate вызывается два раза. Почему это так и как сделать что onCreate вызывался только один раз ?
Ответ: Паблито, Спасибо, а я дурак не догадался