Урок 9. Обработчики событий на примере Button.

Обсуждение уроков
wolfak
Сообщения: 13
Зарегистрирован: 13 сен 2014, 11:15

Re: Урок 9. Обработчики событий на примере Button.

Сообщение wolfak » 13 сен 2014, 13:52

Mikhail_dev писал(а):Ну значит у вас кнопка не инициализировалась, значит
final Button button1 = (Button)findViewById(R.id.toreg);
не нашлась она. Данного ресурса (R.id.toreg) в вашем XML файле нет
Инициализируется так?

Код: Выделить всё

    <Button style="@style/mainbutt"
        android:id="@+id/toreg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/imageView1"
        android:layout_marginTop="20dp"
        android:layout_centerHorizontal="true"
        android:text="@string/ToReg" />

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Mikhail_dev » 13 сен 2014, 14:39

это стиль кнопки, а не сама кнопка. Вы XML покажите, который грузите в метод setContentView

wolfak
Сообщения: 13
Зарегистрирован: 13 сен 2014, 11:15

Re: Урок 9. Обработчики событий на примере Button.

Сообщение wolfak » 13 сен 2014, 15:08

Mikhail_dev писал(а):это стиль кнопки, а не сама кнопка. Вы XML покажите, который грузите в метод setContentView

Код: Выделить всё

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    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.mycitychat.MainActivity$PlaceholderFragment" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="112dp"
        android:adjustViewBounds="false"
        android:contentDescription="@string/MycityLogoDesc"
        android:src="@drawable/logo" />

    <Button style="@style/mainbutt"
        android:id="@+id/toreg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/imageView1"
        android:layout_marginTop="20dp"
        android:layout_centerHorizontal="true"
        android:text="@string/ToReg" />

    <Button style="@style/mainbutt"
        android:id="@+id/tologin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/toreg"
        android:layout_below="@+id/toreg"
        android:layout_marginTop="10dp"
        android:text="@string/ToLogin" />

</RelativeLayout>
Вот весь xml. Что-то не нашел как инициализировать. Подскажите ссылку на урок?
Все делал как указано здесь:
http://startandroid.ru/ru/uroki/vse-uro ... utton.html

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Mikhail_dev » 13 сен 2014, 15:34

Button style это не Button
Добавьте кнопки в XML файл, а не стили. Почитайте в конце концов урок, в теме которого мы находимся

wolfak
Сообщения: 13
Зарегистрирован: 13 сен 2014, 11:15

Re: Урок 9. Обработчики событий на примере Button.

Сообщение wolfak » 14 сен 2014, 14:07

Mikhail_dev писал(а):Button style это не Button
Добавьте кнопки в XML файл, а не стили. Почитайте в конце концов урок, в теме которого мы находимся
Перечитал, все равно что-то не понял. Подскажите пожалуйста новичку, что нужно изменить в моем коде чтобы ошибка не появлялась?

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Mikhail_dev » 14 сен 2014, 15:12

Прошу прощения, моя ошибка, это естественно кнопка, а не стиль кнопки.
Сбросьте по возможности весь проект, я пока не понял в чем ошибка.

wolfak
Сообщения: 13
Зарегистрирован: 13 сен 2014, 11:15

Re: Урок 9. Обработчики событий на примере Button.

Сообщение wolfak » 14 сен 2014, 15:22

Java файл:

Код: Выделить всё

package com.example.mycitychat;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;


public class MainActivity extends ActionBarActivity
        implements NavigationDrawerFragment.NavigationDrawerCallbacks {

    /**
     * Fragment managing the behaviors, interactions and presentation of the navigation drawer.
     */
    private NavigationDrawerFragment mNavigationDrawerFragment;

    /**
     * Used to store the last screen title. For use in {@link #restoreActionBar()}.
     */
    private CharSequence mTitle;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mNavigationDrawerFragment = (NavigationDrawerFragment)
                getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
        mTitle = getTitle();

        // Set up the drawer.
        mNavigationDrawerFragment.setUp(
                R.id.navigation_drawer,
                (DrawerLayout) findViewById(R.id.drawer_layout));
       
        final Button toreg = (Button)findViewById(R.id.toreg);
        //final Button tologin = (Button)findViewById(R.id.tologin);

        // устанавливаем один обработчик для всех кнопок
        toreg.setOnClickListener(new OnClickListener() {
        	@Override
        	public void onClick(View v) {
        		Toast.makeText(MainActivity.this, "Нажата кнопка Reg", Toast.LENGTH_LONG).show();
        		
        	}
        });
        
    }

    @Override
    public void onNavigationDrawerItemSelected(int position) {
        // update the main content by replacing fragments
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.container, PlaceholderFragment.newInstance(position + 1))
                .commit();
    }

    public void onSectionAttached(int number) {
        switch (number) {
            case 1:
                mTitle = getString(R.string.title_section1);
                break;
            case 2:
                mTitle = getString(R.string.title_section2);
                break;
            case 3:
                mTitle = getString(R.string.title_section3);
                break;
        }
    }

    public void restoreActionBar() {
        ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
        actionBar.setDisplayShowTitleEnabled(true);
        actionBar.setTitle(mTitle);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        if (!mNavigationDrawerFragment.isDrawerOpen()) {
            // Only show items in the action bar relevant to this screen
            // if the drawer is not showing. Otherwise, let the drawer
            // decide what to show in the action bar.
            getMenuInflater().inflate(R.menu.main, menu);
            restoreActionBar();
            return true;
        }
        return super.onCreateOptionsMenu(menu);
    }

    @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();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {
        /**
         * The fragment argument representing the section number for this
         * fragment.
         */
        private static final String ARG_SECTION_NUMBER = "section_number";

        /**
         * Returns a new instance of this fragment for the given section
         * number.
         */
        public static PlaceholderFragment newInstance(int sectionNumber) {
            PlaceholderFragment fragment = new PlaceholderFragment();
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            fragment.setArguments(args);
            return fragment;
        }

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);
            return rootView;
        }

        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            ((MainActivity) activity).onSectionAttached(
                    getArguments().getInt(ARG_SECTION_NUMBER));
        }
    }

}
XML файл:

Код: Выделить всё

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    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.mycitychat.MainActivity$PlaceholderFragment" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="112dp"
        android:adjustViewBounds="false"
        android:contentDescription="@string/MycityLogoDesc"
        android:src="@drawable/logo" />

    <Button style="@style/mainbutt"
        android:id="@+id/toreg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/imageView1"
        android:layout_marginTop="20dp"
        android:layout_centerHorizontal="true"
        android:text="@string/ToReg" />

    <Button style="@style/mainbutt"
        android:id="@+id/tologin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/toreg"
        android:layout_below="@+id/toreg"
        android:layout_marginTop="10dp"
        android:text="@string/ToLogin" />

</RelativeLayout>

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Mikhail_dev » 14 сен 2014, 16:21

Вот этот XML файл, он точно имеет имя activity_main.XML ?

wolfak
Сообщения: 13
Зарегистрирован: 13 сен 2014, 11:15

Re: Урок 9. Обработчики событий на примере Button.

Сообщение wolfak » 15 сен 2014, 18:35

Mikhail_dev писал(а):Вот этот XML файл, он точно имеет имя activity_main.XML ?
Извините, действительно писал не в тот файл.

Valdeg
Сообщения: 1
Зарегистрирован: 03 ноя 2014, 15:36

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Valdeg » 03 ноя 2014, 16:14

Добрый день. Совсем недавно начал изучать программирование, пишу в IntellijIDEA. Урок к сожалению этот выполнить не смог, еще предстоит разбираться. Мой вопрос вот в чем:

Код: Выделить всё

package com.tutorial.buttons.app;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

/**
 * Created by Vladislav on 3.11.2014.
 */
public class Main extends Activity {
    TextView txt1;
    Button  btn1;
    Button btn2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        txt1 = (TextView)findViewById(R.id.txt1);
        btn1 = (Button)findViewById(R.id.btn1);
        btn2 = (Button)findViewById(R.id.btn2);
    }
    public void onClickOk(View view){
        txt1.setText("OK is now active");
    }
    public void onClickCancel(View view){
        txt1.setText("OK is no longer active");
    }
}

Решил задачу вот таким способом а не как показано в уроке. Вопрос: какие есть способы заставить кнопку реагировать на нажатие, и в чем разница между ними. (Простите если забегаю вперед)


Предвосхищая вопросы, скажу что код выложенный здесь - рабочий

А реализовать решение через OnClickListener так же как в уроке не вышло. Редактор предлагает замену на DialogInterface.OnClickListener; или
View.OnClickListener;
OnclickListener подчеркивается красным. Возможно не разобрался с ипортом?

UPD

С импортом действительно была проблема. Если обычно редактор автоматически все прописывает то тут не хотел ни в какую. Срока import android.view.View.OnClickListener; все вылечила. Однако назначить из него метод на кнопку не получается. Просто не в списке если подключать через визуальный редактор. Если назначаю через xml файл вводя вручную, приложение вылетает.
Последний раз редактировалось Valdeg 03 ноя 2014, 19:02, всего редактировалось 1 раз.

Bolt
Сообщения: 5
Зарегистрирован: 03 ноя 2014, 18:22

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Bolt » 03 ноя 2014, 18:53

Вроде делаю все правильно. А импортер какой то другой вылазит! Не пойму.

Bolt
Сообщения: 5
Зарегистрирован: 03 ноя 2014, 18:22

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Bolt » 03 ноя 2014, 18:55

Не выходит совсем. Вроде ошибок нет. Выдавало сначала Can't bind to local 8621 for debugger. А сейчас вроде запустился. Но на кнопку нажимаю и без толку остается text view.
package com.example.p0091_onclickbuttons;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {
TextView tvOut;
Button btnOk;
Button btnCancel;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// найдем View элементы
tvOut = (TextView) findViewById(R.id.tvOut);
btnOk = (Button) findViewById(R.id.btnOk);
btnCancel = (Button) findViewById(R.id.btnCancel);
}
OnClickListener oclBtnOk = new OnClickListener() {
@Override
public void onClick(View v) { // Меняем текст в TextView (tvOut)
tvOut.setText("Нажата кнопка Ok");

// присвоим обработчик кнопке OK (btnOk)
btnOk.setOnClickListener(oclBtnOk);
//присвоим обработчик кнопке OK (btnOk)
btnOk.setOnClickListener(oclBtnOk);
}
};


OnClickListener oclBtnCancel = new OnClickListener() {
@Override
public void onClick(View v) {
// Меняем текст в TextView (tvOut)
tvOut.setText("Нажата кнопка Cancel");
btnCancel.setOnClickListener(oclBtnCancel);
}
};




@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.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();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);

}}

kostia2022
Сообщения: 4
Зарегистрирован: 04 ноя 2014, 20:19

Re: Урок 9. Обработчики событий на примере Button.

Сообщение kostia2022 » 04 ноя 2014, 21:10

Код: Выделить всё

tvOut = (TextView) findViewById(R.id.tvOut);
btnOk = (Button) findViewById(R.id.btnOk);
btnCancel = (Button) findViewById(R.id.btnCancel)
tvOut btnOk btnCancel не прописывается в R. как это исправить?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Foenix » 04 ноя 2014, 21:34

ты удивишься, ошибка где-то в каком-то из xml_файлов.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Bolt
Сообщения: 5
Зарегистрирован: 03 ноя 2014, 18:22

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Bolt » 04 ноя 2014, 22:32

Foenix писал(а):ты удивишься, ошибка где-то в каком-то из xml_файлов.
Да я посмотрел в xml нет ошибок. Там есть ошибки на Hardcorded ну то есть в названии ну это вроде нормально. И все таки смотрите приложение у меня запускается без ошибок. А сам text view не меняется при нажатие кнопки. В книге сказано что обработчик события ставится за пределом метода
OnClickListener oclBtnCancel = new OnClickListener() {
@Override
public void onClick(View v) {
// Меняем текст в TextView (tvOut)
tvOut.setText("Нажата кнопка Cancel");
}
};
и потом присваиваем кнопке btnCancel.setOnClickListener(oclBtnCancel);
Да правильно. Но у меня так не выходит у меня получается вот так.
@Override
public void onClick(View v) {
// Меняем текст в TextView (tvOut)
tvOut.setText("Нажата кнопка Cancel");
btnCancel.setOnClickListener(oclBtnCancel);
}
}; Может это из за этого быть? По скок важно разобраться из за чего подобное происходит. Еще вопрос не по тебе ошибка описанная мною выше из за чего возникает ? ( Там где с портом связано) И как ее вобще можно исправить?
Последний раз редактировалось Bolt 04 ноя 2014, 22:53, всего редактировалось 2 раза.

Bolt
Сообщения: 5
Зарегистрирован: 03 ноя 2014, 18:22

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Bolt » 04 ноя 2014, 22:45

kostia2022 писал(а):

Код: Выделить всё

tvOut = (TextView) findViewById(R.id.tvOut);
btnOk = (Button) findViewById(R.id.btnOk);
btnCancel = (Button) findViewById(R.id.btnCancel)
tvOut btnOk btnCancel не прописывается в R. как это исправить?
Сохрани файл должно помочь. Мне помогло.

mixailanarxist
Сообщения: 17
Зарегистрирован: 15 ноя 2014, 23:26

Re: Урок 9. Обработчики событий на примере Button.

Сообщение mixailanarxist » 21 ноя 2014, 14:51

До создания обработчика нажатия все понятно. Но потом появляются вопросы с кодом самого обработчика и возникают ошибки. Почитав форум понял что ошибки возникают из-за строки "@Override", которую не нужно писать в новых версиях и скобок {}. Понятно, что количество открытых и закрытых скобок должно совпадать, и каждая пара скобок соответствует определенному объекту кода.
Не понятно в коде обработчика (с сайта) скобки соответствуют обработчику, или чему-то еще.
OnClickListener oclBtnOk = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
};
И кто- бы рассказал про структуру обработчика подробнее.

mixailanarxist
Сообщения: 17
Зарегистрирован: 15 ноя 2014, 23:26

Re: Урок 9. Обработчики событий на примере Button.

Сообщение mixailanarxist » 21 ноя 2014, 15:32

Почитал описание еще этого метода тут и стало все на свои места http://developer.alexanderklimov.ru/and ... button.php
Также посмотрел и другие методы обработки нажатия кнопки.
Почему-то для меня логичнее было использовать код:
btnOk.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
tvOut.setText("Нажата кнопка ОК");
}
});
Т.е. мы написали сразу изучаемый метод, в нем прописали обработчика, и указали то, что нужно сделать.
Также нужно было изменить privat class (который был прописан по умолчанию при открытии MainActivity.java) на public class.

dzm
Сообщения: 1
Зарегистрирован: 21 ноя 2014, 11:52

Re: Урок 9. Обработчики событий на примере Button.

Сообщение dzm » 22 ноя 2014, 21:12

[syntax=java] OnClickListener oclBtnOk = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub

}
};[/syntax]
1) Почему используется OnClickListener, а не View.OnClickListener
Это статический импорт? Или что?
2) Не могу понять, что значит когда за оператором создания объекта new используется конструкция {...}. Подскажите, из какой области языка Java это, что бы почитать? Или это такой синтаксис реализации конструктора?

Vladimir991
Сообщения: 7
Зарегистрирован: 15 ноя 2014, 03:15

Re: Урок 9. Обработчики событий на примере Button.

Сообщение Vladimir991 » 23 ноя 2014, 05:12

Спасибо урок понятен, все работает, но немножко наоборот кнопки работают. Нажимаешь на кнопку Cancel, пишет Нажата кнопка OK и наоборот, нажимаешь на кнопку OK, пишет нажата кнопка Cancel. Код перелопатил, все вроде верно написано, но что-то, где-то всетаки не так. Направьте в нужном направлении пожалуйста. Вот скрин кода:
Вложения
23-11-2014 8-08-56.jpg
23-11-2014 8-08-56.jpg (101 КБ) 5794 просмотра

Ответить