Помогите с actionLayout [РЕШЕНО]
Добавлено: 14 июн 2015, 23:08
Скажите, как сделать onClickListener для кнопки, вызванной actionLayout? Пробовал, но приложение выдаёт ошибку:
1. Пробовал в OnClick, и вот, что получилось:
[syntax=java]package com.android.develop;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
Button button1 = (Button) findViewById(R.id.button_1);
Button button2 = (Button) findViewById(R.id.button_2);
OnClickListener onclick1 = new OnClickListener()
{
@Override
public void onClick(View v)
{
switch(v.getId())
{
case R.id.button_1:
Toast toast1 = Toast.makeText(getApplicationContext(),"Нажата кнопка" ,Toast.LENGTH_SHORT);
toast1.show();
break;
case R.id.button_2:
Toast toast2 = Toast.makeText(getApplicationContext(),"Нажата кнопка Action Bar" ,Toast.LENGTH_SHORT);
toast2.show();
break;
}
}
};
button1.setOnClickListener(onclick1);
button2.setOnClickListener(onclick1);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}
}[/syntax]

2. Пробовал занести в OnOptionsItemSelected:
[syntax=java]package com.android.develop;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
Button button1 = (Button) findViewById(R.id.button_1);
OnClickListener onclick1 = new OnClickListener()
{
@Override
public void onClick(View v)
{
Toast toast1 = Toast.makeText(getApplicationContext(),"Нажата кнопка" ,Toast.LENGTH_SHORT);
toast1.show();
}
};
button1.setOnClickListener(onclick1);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.button_2:
Toast toast2 = Toast.makeText(getApplicationContext(),"Нажата кнопка Action Bar" ,Toast.LENGTH_SHORT);
toast2.show();
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}
}[/syntax]
Но при нажатии на кнопку ничего не происходит

3. Пробовал занести в OnOptionsItemSelected не по id кнопки в actionLayout, а по id пункта меню, но сообщение всплывает не от кнопки, а от пункта меню:
[syntax=java]package com.android.develop;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
Button button1 = (Button) findViewById(R.id.button_1);
OnClickListener onclick1 = new OnClickListener()
{
@Override
public void onClick(View v)
{
Toast toast1 = Toast.makeText(getApplicationContext(),"Нажата кнопка" ,Toast.LENGTH_SHORT);
toast1.show();
}
};
button1.setOnClickListener(onclick1);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.menu_2:
Toast toast2 = Toast.makeText(getApplicationContext(),"Нажата кнопка Action Bar" ,Toast.LENGTH_SHORT);
toast2.show();
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}
}[/syntax]

Код res/menu/menu_main.xml:
[syntax=xml]<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_1"
android:icon="@android:drawable/ic_menu_help"
android:title="@string/title_2"
android:orderInCategory="1"
android:showAsAction="always" />
<item
android:id="@+id/menu_2"
android:icon="@android:drawable/ic_menu_search"
android:title="@string/title_3"
android:orderInCategory="0"
android:showAsAction="collapseActionView|always"
android:actionLayout="@layout/action_main_layout" />
</menu>[/syntax]
Код res/layout/action_main_layout.xml
[syntax=xml]<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<Button
android:id="@+id/button_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>[/syntax]
1. Пробовал в OnClick, и вот, что получилось:
[syntax=java]package com.android.develop;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
Button button1 = (Button) findViewById(R.id.button_1);
Button button2 = (Button) findViewById(R.id.button_2);
OnClickListener onclick1 = new OnClickListener()
{
@Override
public void onClick(View v)
{
switch(v.getId())
{
case R.id.button_1:
Toast toast1 = Toast.makeText(getApplicationContext(),"Нажата кнопка" ,Toast.LENGTH_SHORT);
toast1.show();
break;
case R.id.button_2:
Toast toast2 = Toast.makeText(getApplicationContext(),"Нажата кнопка Action Bar" ,Toast.LENGTH_SHORT);
toast2.show();
break;
}
}
};
button1.setOnClickListener(onclick1);
button2.setOnClickListener(onclick1);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}
}[/syntax]

2. Пробовал занести в OnOptionsItemSelected:
[syntax=java]package com.android.develop;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
Button button1 = (Button) findViewById(R.id.button_1);
OnClickListener onclick1 = new OnClickListener()
{
@Override
public void onClick(View v)
{
Toast toast1 = Toast.makeText(getApplicationContext(),"Нажата кнопка" ,Toast.LENGTH_SHORT);
toast1.show();
}
};
button1.setOnClickListener(onclick1);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.button_2:
Toast toast2 = Toast.makeText(getApplicationContext(),"Нажата кнопка Action Bar" ,Toast.LENGTH_SHORT);
toast2.show();
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}
}[/syntax]
Но при нажатии на кнопку ничего не происходит

3. Пробовал занести в OnOptionsItemSelected не по id кнопки в actionLayout, а по id пункта меню, но сообщение всплывает не от кнопки, а от пункта меню:
[syntax=java]package com.android.develop;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
Button button1 = (Button) findViewById(R.id.button_1);
OnClickListener onclick1 = new OnClickListener()
{
@Override
public void onClick(View v)
{
Toast toast1 = Toast.makeText(getApplicationContext(),"Нажата кнопка" ,Toast.LENGTH_SHORT);
toast1.show();
}
};
button1.setOnClickListener(onclick1);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.menu_2:
Toast toast2 = Toast.makeText(getApplicationContext(),"Нажата кнопка Action Bar" ,Toast.LENGTH_SHORT);
toast2.show();
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}
}[/syntax]

Код res/menu/menu_main.xml:
[syntax=xml]<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_1"
android:icon="@android:drawable/ic_menu_help"
android:title="@string/title_2"
android:orderInCategory="1"
android:showAsAction="always" />
<item
android:id="@+id/menu_2"
android:icon="@android:drawable/ic_menu_search"
android:title="@string/title_3"
android:orderInCategory="0"
android:showAsAction="collapseActionView|always"
android:actionLayout="@layout/action_main_layout" />
</menu>[/syntax]
Код res/layout/action_main_layout.xml
[syntax=xml]<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<Button
android:id="@+id/button_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>[/syntax]