Страница 15 из 21
Re: Урок 9. Обработчики событий на примере Button.
Добавлено: 13 сен 2014, 13:52
wolfak
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" />
Re: Урок 9. Обработчики событий на примере Button.
Добавлено: 13 сен 2014, 14:39
Mikhail_dev
это стиль кнопки, а не сама кнопка. Вы XML покажите, который грузите в метод setContentView
Re: Урок 9. Обработчики событий на примере Button.
Добавлено: 13 сен 2014, 15:08
wolfak
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
Re: Урок 9. Обработчики событий на примере Button.
Добавлено: 13 сен 2014, 15:34
Mikhail_dev
Button style это не Button
Добавьте кнопки в XML файл, а не стили. Почитайте в конце концов урок, в теме которого мы находимся
Re: Урок 9. Обработчики событий на примере Button.
Добавлено: 14 сен 2014, 14:07
wolfak
Mikhail_dev писал(а):Button style это не Button
Добавьте кнопки в XML файл, а не стили. Почитайте в конце концов урок, в теме которого мы находимся
Перечитал, все равно что-то не понял. Подскажите пожалуйста новичку, что нужно изменить в моем коде чтобы ошибка не появлялась?
Re: Урок 9. Обработчики событий на примере Button.
Добавлено: 14 сен 2014, 15:12
Mikhail_dev
Прошу прощения, моя ошибка, это естественно кнопка, а не стиль кнопки.
Сбросьте по возможности весь проект, я пока не понял в чем ошибка.
Re: Урок 9. Обработчики событий на примере Button.
Добавлено: 14 сен 2014, 15:22
wolfak
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>
Re: Урок 9. Обработчики событий на примере Button.
Добавлено: 14 сен 2014, 16:21
Mikhail_dev
Вот этот XML файл, он точно имеет имя activity_main.XML ?
Re: Урок 9. Обработчики событий на примере Button.
Добавлено: 15 сен 2014, 18:35
wolfak
Mikhail_dev писал(а):Вот этот XML файл, он точно имеет имя activity_main.XML ?
Извините, действительно писал не в тот файл.
Re: Урок 9. Обработчики событий на примере Button.
Добавлено: 03 ноя 2014, 16:14
Valdeg
Добрый день. Совсем недавно начал изучать программирование, пишу в 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 файл вводя вручную, приложение вылетает.
Re: Урок 9. Обработчики событий на примере Button.
Добавлено: 03 ноя 2014, 18:53
Bolt
Вроде делаю все правильно. А импортер какой то другой вылазит! Не пойму.
Re: Урок 9. Обработчики событий на примере Button.
Добавлено: 03 ноя 2014, 18:55
Bolt
Не выходит совсем. Вроде ошибок нет. Выдавало сначала 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);
}}
Re: Урок 9. Обработчики событий на примере Button.
Добавлено: 04 ноя 2014, 21:10
kostia2022
Код: Выделить всё
tvOut = (TextView) findViewById(R.id.tvOut);
btnOk = (Button) findViewById(R.id.btnOk);
btnCancel = (Button) findViewById(R.id.btnCancel)
tvOut btnOk btnCancel не прописывается в R. как это исправить?
Re: Урок 9. Обработчики событий на примере Button.
Добавлено: 04 ноя 2014, 21:34
Foenix
ты удивишься, ошибка где-то в каком-то из xml_файлов.
Re: Урок 9. Обработчики событий на примере Button.
Добавлено: 04 ноя 2014, 22:32
Bolt
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);
}
}; Может это из за этого быть? По скок важно разобраться из за чего подобное происходит. Еще вопрос не по тебе ошибка описанная мною выше из за чего возникает ? ( Там где с портом связано) И как ее вобще можно исправить?
Re: Урок 9. Обработчики событий на примере Button.
Добавлено: 04 ноя 2014, 22:45
Bolt
kostia2022 писал(а):Код: Выделить всё
tvOut = (TextView) findViewById(R.id.tvOut);
btnOk = (Button) findViewById(R.id.btnOk);
btnCancel = (Button) findViewById(R.id.btnCancel)
tvOut btnOk btnCancel не прописывается в R. как это исправить?
Сохрани файл должно помочь. Мне помогло.
Re: Урок 9. Обработчики событий на примере Button.
Добавлено: 21 ноя 2014, 14:51
mixailanarxist
До создания обработчика нажатия все понятно. Но потом появляются вопросы с кодом самого обработчика и возникают ошибки. Почитав форум понял что ошибки возникают из-за строки "@Override", которую не нужно писать в новых версиях и скобок {}. Понятно, что количество открытых и закрытых скобок должно совпадать, и каждая пара скобок соответствует определенному объекту кода.
Не понятно в коде обработчика (с сайта) скобки соответствуют обработчику, или чему-то еще.
OnClickListener oclBtnOk = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
};
И кто- бы рассказал про структуру обработчика подробнее.
Re: Урок 9. Обработчики событий на примере Button.
Добавлено: 21 ноя 2014, 15:32
mixailanarxist
Почитал описание еще этого метода тут и стало все на свои места
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.
Re: Урок 9. Обработчики событий на примере Button.
Добавлено: 22 ноя 2014, 21:12
dzm
[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 это, что бы почитать? Или это такой синтаксис реализации конструктора?
Re: Урок 9. Обработчики событий на примере Button.
Добавлено: 23 ноя 2014, 05:12
Vladimir991
Спасибо урок понятен, все работает, но немножко наоборот кнопки работают. Нажимаешь на кнопку Cancel, пишет Нажата кнопка OK и наоборот, нажимаешь на кнопку OK, пишет нажата кнопка Cancel. Код перелопатил, все вроде верно написано, но что-то, где-то всетаки не так. Направьте в нужном направлении пожалуйста. Вот скрин кода: