Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
1inkin1
0 / 0 / 1
Регистрация: 13.03.2014
Сообщений: 194
1

Кнопка не нажимается с первого раза

22.04.2018, 23:00. Просмотров 1026. Ответов 18
Метки нет (Все метки)

Здравствуйте. Столкнулся со странной вещью - кнопки на мейнактивити не нажимаются с первого раза. Если запустить приложение, то сначала всё нормально, но если перейти на другое активити, а потом вернуться снова на мейн и нажать на кнопку, то ничего не происходит, а после второго нажатия начинает работать. причем на других активити такого нет. в чем может быть проблема? я уже всю голову сломал и новые кнопки создавал и перемещал их на разные лейоты размещал - все равно с первого раза не работают.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2018, 23:00
Ответы с готовыми решениями:

Кнопка Enter в командной строке нажимается по 2 раза
Здравствуйте. Есть программа для записи/чтения тесктовых файлов, написана на си++ в Visual. Такое...

Vba+Ie не нажимается кнопка
Всем привет! Помогите разобраться, ребята.. есть сайт (скинуть не могу, политика безопасности)...

Не нажимается кнопка сохранить
Всем доброго времени суток! Такая ситуация, установил Битрикс интернет магазин с стандартным...

Невидимая кнопка не нажимается
Вопрос, вероятно, очень глупый, но ответ на него я так и не нашел. Знаний о Delphi у меня не много,...

Не нажимается кнопка Отправить
Через сниффер все делал. Сообщение не отправляется, то есть не нажимается кнопка отправить на...

18
Mail-up
30 / 28 / 8
Регистрация: 07.01.2017
Сообщений: 205
23.04.2018, 01:12 2
Очевидно что проблема есть
0
ExFau$t
954 / 756 / 224
Регистрация: 08.05.2012
Сообщений: 3,604
23.04.2018, 10:35 3
Код где?
0
1inkin1
0 / 0 / 1
Регистрация: 13.03.2014
Сообщений: 194
23.04.2018, 23:29  [ТС] 4
MainActivity.java
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
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
package com.example.a002;
 
 
import android.content.Intent;
 
 
import android.os.Bundle;
 
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
 
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
 
import android.widget.Button;
import android.widget.Toast;
 
 
public class MainActivity extends AppCompatActivity {
 
 
    Button button;
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
 
        button = (Button) findViewById(R.id.button);
 
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "нажал", Toast.LENGTH_SHORT).show();
            }
        });
    }
 
    @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) {
        // 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();
 
        switch (id) {
            case R.id.mSET:
                Intent settings = new Intent(this, SettingsActivity.class);
                startActivity(settings);
                break;
            case R.id.mAlarm:
                Intent alarm = new Intent(this, AlarmActivity.class);
                startActivity(alarm);
                break;
            case R.id.mPROF:
                Intent profile = new Intent(this, ProfileActivity.class);
                startActivity(profile);
                break;
            case R.id.mAB:
                Intent about = new Intent(this, AboutActivity.class);
                startActivity(about);
                break;
        }
 
        return super.onOptionsItemSelected(item);
    }
 
 
}
Добавлено через 1 минуту
Content_main.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    android:weightSum="1"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    app:layout_scrollFlags="scroll"
    tools:context="com.example.a002.MainActivity"
    tools:showIn="@layout/activity_main">
 
    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/button" />
 
</LinearLayout>
Добавлено через 36 секунд
Activity_main.xml
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
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    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.example.a002.MainActivity">
 
    <android.support.design.widget.AppBarLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:theme="@style/AppTheme.AppBarOverlay">
 
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?android:attr/actionBarSize"
            android:background="@color/colorAccent"
            app:popupTheme="@style/AppTheme.PopupOverlay" />
 
    </android.support.design.widget.AppBarLayout>
 
    <include layout="@layout/content_main"
        android:id="@+id/include"/>
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
 
    </LinearLayout>
 
</android.support.design.widget.CoordinatorLayout>
Добавлено через 6 минут
на другом активити, которое открывается из меню, может даже вообще ничего не происходить и оно может быть пустое - просто перехожу через меню на другое активити, потом через меню возвращаюсь обратно и кнопка не срабатывает с первого раза.
0
23.04.2018, 23:29
+1
328 / 161 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
24.04.2018, 07:51 5
Это не весь код. Самое нужное - где ты переходишь на другое активити и возвращаешься назад – этого не вижу.

Добавлено через 56 минут
Пардоньте, не по-русски выразился.
Каким образом "возвращаешься"?
Лучше бы весь проект выложил, ибо в представленном коде косяков нет.
0
1inkin1
0 / 0 / 1
Регистрация: 13.03.2014
Сообщений: 194
24.04.2018, 08:30  [ТС] 6
Java
1
public boolean onOptionsItemSelected
Переходы между активити через меню в виде выпадающего списка. На другом активити аналогичный код для меню
0
Mail-up
30 / 28 / 8
Регистрация: 07.01.2017
Сообщений: 205
24.04.2018, 08:36 7
Кликните здесь для просмотра всего текста
лучше напостить 100 пустых сообщений чем написать одно по делу, не правда ли?
0
+1
328 / 161 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
24.04.2018, 13:43 8
Вот как догадаться, что там у тебя в манифесте?
Ты запретил запуск копий?
Или сейчас у тебя получается, что ты запускаешь вторую активити, потом из неё ещё одну первую, поверх старой, причем, старая так же жива и ожидает событий от обработчиков.
Или тут finish добавь, прежде чем запускать вторую.
0
1inkin1
0 / 0 / 1
Регистрация: 13.03.2014
Сообщений: 194
24.04.2018, 21:06  [ТС] 9
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
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.a002" >
 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.VIBRATE"/>
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar"
            android:launchMode="singleTask">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".SettingsActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar" >
        </activity>
        <activity
            android:name=".AboutActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar" >
        </activity>     
    </application>
 
</manifest>
0
Mail-up
30 / 28 / 8
Регистрация: 07.01.2017
Сообщений: 205
24.04.2018, 21:10 10
А где еще 2 активити в манифесте?
Profile и alarm
0
1inkin1
0 / 0 / 1
Регистрация: 13.03.2014
Сообщений: 194
25.04.2018, 19:52  [ТС] 11
лишнее удалил - они не используются. тут можно один любой другой активити оставить и не важно, что на нем находится, оно может быть вобще пустое и все равно при переходе на него и обратно на мейн будет происходить эта ситуация

Добавлено через 21 час 59 минут
методом исключения выяснил, что проблема из-за строки в манифесте, чтобы активити не создавалось заново и сохраняло свое состояние. если убрать этот параметр, то кнопки нажимаются с первого раза, но само приложение тогда будет работать некорректно, так что этот параметр важен.
XML
1
android:launchMode="singleTask"
Можно ли както исправить проблему? я вообще не могу понять из-за чего это происходит.
0
Mail-up
30 / 28 / 8
Регистрация: 07.01.2017
Сообщений: 205
25.04.2018, 19:55 12
Тут никто не может понять потому что нет кода полностью в том виде в котором он нужен для полного видения ситуации.
Сложна
0
1inkin1
0 / 0 / 1
Регистрация: 13.03.2014
Сообщений: 194
25.04.2018, 20:11  [ТС] 13
я весь код выложил - все три файла мейнактивити и манифест. другие активити работают с меню так же и могут быть даже пустыми, но вот пример другое активити
activity_about.xml
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
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    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.example.a002.AboutActivity">
 
    <android.support.design.widget.AppBarLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:theme="@style/AppTheme.AppBarOverlay">
 
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?android:attr/actionBarSize"
            android:background="@color/colorAccent"
            app:popupTheme="@style/AppTheme.PopupOverlay" />
 
    </android.support.design.widget.AppBarLayout>
 
    <include layout="@layout/content_about"/>
 
</android.support.design.widget.CoordinatorLayout>
content_about.xml
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_about"
    tools:context="com.example.a002.AboutActivity">
 
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >
 
            <Button
                android:id="@+id/bSUP"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/bSUP" />
 
            <TextView
                android:id="@+id/tName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/app_name"
                android:textAlignment="center"
                android:textSize="24sp"
                android:textStyle="bold" />           
 
        </LinearLayout>
    </ScrollView>
 
</LinearLayout>
AboutActivity.java
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
55
56
57
58
59
60
61
62
63
64
65
66
package com.example.a002;
 
import android.content.Intent;
import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
 
public class AboutActivity extends AppCompatActivity {
 
    Button bSUP;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_about);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
 
        bSUP = (Button) findViewById(R.id.bSUP);
 
        bSUP.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {           
                Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto","test@gmail.com", null));
                emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Support");
                startActivity(Intent.createChooser(emailIntent, ""));
            }
        });
    }
 
    @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) {
        // 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    
 
    switch (id) {
        case R.id.mSET:
            Intent settings = new Intent(this, SettingsActivity.class);
            startActivity(settings);
        break;
        case R.id.mMAIN:
            Intent main = new Intent(this, MainActivity.class);
            startActivity(main);
        break;
    }
 
        return super.onOptionsItemSelected(item);
    }
}
0
Mail-up
30 / 28 / 8
Регистрация: 07.01.2017
Сообщений: 205
25.04.2018, 20:13 14
Вот теперь понятно) судя по коду все работает так как и должно работать)
0
1inkin1
0 / 0 / 1
Регистрация: 13.03.2014
Сообщений: 194
25.04.2018, 20:18  [ТС] 15
хех а как сделать, чтобы работало так как надо?
0
+1
328 / 161 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
26.04.2018, 04:35 16
Лучший ответ Сообщение было отмечено 1inkin1 как решение

Решение

Цитата Сообщение от 1inkin1 Посмотреть сообщение
а как сделать, чтобы работало так как надо?
C андроидом это сложный вопрос. Сегодня код работает как надо, а завтра получим обновление андроид студии и придется переписывать половину кода на новые правила.
В твоей ситуации, такое впечатление, что активити вроде как отриcовывается, но не получает фокуса.
И, получается, что первым тычком ты даёшь ей фокус, а потом она начинает обрабатывать события.
Попробуй такой костыль - в onResume принудительно пропиши фокус какому-нибудь лайоуту.
Javascript
1
My_Layout.requestFocus();
XML
1
2
3
4
5
6
             <LinearLayout
                    android:id="@+id/My_Layout"
                    .......................
                    android:focusable="true"
                    android:focusableInTouchMode="true"
            .................
1
Mail-up
30 / 28 / 8
Регистрация: 07.01.2017
Сообщений: 205
26.04.2018, 08:20 17
Ты переходишь с иэйн в эбаут активити. А потом не возвращаешься назад а переходишь дальше по стеку. Т. Е. Создаешь еще одну копию.

Как минимум Надо определится с архитектурой приложения что бы не было путаницы.потому что в данном случае просто плодятся активити, что порождает кучу кривизны. Как вариант заюзать готовый шаблон типа navigationDrawer или bottomSheet.

Надо так же понять когда ты возвращаешься а когда идешь дальше. В эбаут активити при ппррходе на мэйн можно добавить this.finish так же и в методе onBackPressed.добавить this.finish.тогда эбаут будет работать как надо.
0
+1
328 / 161 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
26.04.2018, 09:17 18
Цитата Сообщение от Mail-up Посмотреть сообщение
Создаешь еще одну копию
У него в манифесте прописано
android:launchMode="singleTask"
Так копия не создаётся.
0
1inkin1
0 / 0 / 1
Регистрация: 13.03.2014
Сообщений: 194
26.04.2018, 19:07  [ТС] 19
Спасибо, я понял вашу идею о проблеме. с фокусами не получилось, но решил проблему имитацией нажатия на экран в onResume. конечно, костыль, но других идей не нашел.
0
26.04.2018, 19:07
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2018, 19:07

Сама нажимается правая кнопка мыши
Периодически происходит имитация нажатия правой кнопки мыши. Диски полностью форматировал, купил...

В WebBrowser, не нажимается кнопка web-страницы
Сразу хочу отметить, что тема необычная, она скорей относится не столько к Delphi, сколько...

Когда время истекает автоматически нажимается кнопка
Когда время истекает автоматически нажимается кнопка. Помогите пожалуйстаю


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.