Подскажите пожалуйста, как решить проблему с переходом на новую активность в Android?
У меня две активности: MainActivity и CategoriesActivity. На первой есть 2 кнопки (обычные button), одна из которых ведет на вторую активность (CategoriesActivity). Всё стандартное, исключая текст на кнопках (первая активность) и задний фон все на той же первой активности, при попытке запустить приложение работает, а при переходе на новую активность, то есть нажимаю на кнопку вылетает приложение с ошибкой (в приложении произошел сбой).
Может, кто-нибудь знает, как решить проблему?
MainActivity.java
import android.content.Intent;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List<Slide> IstSlides ;
private ViewPager sliderpager;
private Button startBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sliderpager = findViewById(R.id.slider_pager);
startBtn = findViewById(R.id.start_btn);
startBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
Intent categoryIntent = new Intent(MainActivity.this, CategoriesActivity.class);
startActivity(categoryIntent);
} catch (Exception e) {
}
}
});
// Список слайдов
IstSlides = new ArrayList<>();
IstSlides.add(new Slide(R.drawable.slide1, ""));
IstSlides.add(new Slide(R.drawable.slide1, ""));
SliderPagerAdapter adapter = new SliderPagerAdapter(this, IstSlides);
sliderpager.setAdapter(adapter);
}
}
CategoriesActivity.java
import android.view.MenuItem;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.widget.Toolbar;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class CategoriesActivity extends AppCompatActivity {
private RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_categories);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar (toolbar);
getSupportActionBar().setTitle("Categories");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
recyclerView = findViewById(R.id.rv);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(RecyclerView.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
List<CategoryModel> list = new ArrayList<>();
list.add(new CategoryModel("", "Category1"));
list.add(new CategoryModel("", "Category1"));
list.add(new CategoryModel("", "Category1"));
list.add(new CategoryModel("", "Category1"));
list.add(new CategoryModel("", "Category1"));
list.add(new CategoryModel("", "Category1"));
list.add(new CategoryModel("", "Category1"));
list.add(new CategoryModel("", "Category1"));
list.add(new CategoryModel("", "Category1"));
list.add(new CategoryModel("", "Category1"));
CategoryAdapter adapter = new CategoryAdapter(list);
recyclerView.setAdapter(adapter);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
}
Ответы (2 шт):
Скорее всего ваша проблема в установленной теме. Вы пытаетесь установить свой ActionBar в то время как в теме он уже прописан. Вам необходимо установить родительскую тему
Theme.AppCompat.Light.NoActionBar
Либо другие в которых по дефолту нет ActionBar.
Как уже было сказано в ответе @SergeiBuvaka вам нужно установить определенную тему для вашего приложения. Но я бы так же предложил, добавить свои стили для вашей активности в которой будет ваш тулбар:
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
в то время как ваши основные стили будут с тулбаром:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
и дальше в манифесте установим тему для активности которую вы хотите сделать без тулбара:
<activity
android:name="com.example.NonActionBarActivity"
android:theme="@style/AppTheme.NoActionBar"
