Почему приложение вылетает [закрыт]

151
25 декабря 2019, 16:20
Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Update the question so it's on-topic for Stack Overflow на русском.

Закрыт 9 месяцев назад.

Подскажите почему мое приложение не работает.Сам пытался разобраться к сожалению не смог. Майн акстивити.

public class MainActivity extends AppCompatActivity {
List<ModelClass> model = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setData();
    RecyclerView recyclerView =(RecyclerView) findViewById(R.id.recyclerView);
    // создаем адаптер
    Adapter_class adapter = new Adapter_class(this, model);
    // устанавливаем для списка адаптер
    LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
    recyclerView.setLayoutManager(linearLayoutManager);
    recyclerView.setAdapter(adapter);
}
private void setData(){
    model.add(new ModelClass (R.color.colorAccent));
    model.add(new ModelClass (R.color.colorAccent));
    model.add(new ModelClass (R.color.colorAccent));
    model.add(new ModelClass (R.color.colorAccent));
}
public void Intent_1(int ButtonPosition){
    Intent intent=new Intent(MainActivity.this,for_trenirovryClick.class);
   intent.putExtra("OnClickRecyclerView",ButtonPosition);
    startActivity(intent);
}

}

public class Adapter_class extends RecyclerView.Adapter<Adapter_class.ViewHolder> {
private LayoutInflater inflater;
private List<ModelClass> modelClass;
Context context1;
MainActivity mainActivity=new MainActivity();
int positionIndex;
Adapter_class(Context context, List<ModelClass> modelClass) {
    this.modelClass = modelClass;
    this.inflater = LayoutInflater.from(context);
    this.context1=context;
}
@Override
public Adapter_class.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = inflater.inflate(R.layout.item_layout, parent, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(Adapter_class.ViewHolder holder, final int position) {
    ModelClass model_class = modelClass.get(position);
    holder.button.setBackgroundResource(model_class.getBackground());
    holder.button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           switch (position){
               case 0:mainActivity.Intent_1(0);
               case 2:mainActivity.Intent_1(1);
               case 3:mainActivity.Intent_1(2);
               case 1:mainActivity.Intent_1(3);
           }
        }
    });


}
@Override
public int getItemCount() {
    return modelClass.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
    final Button button;
    ViewHolder(View view) {
        super(view);
        button =  (Button) view.findViewById(R.id.button4);
    }
}

}

public class ModelClass {
private int image;
public ModelClass(int image){ this.image = image;}
public int getBackground() {return this.image; }

}

public class for_trenirovryClick extends AppCompatActivity {
List<ModelClass2> model = new ArrayList<>();
RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_for_trenirovry_click);
    Intent intent1=getIntent();
    int i= intent1.getIntExtra("OnClickRecyclerView",1);
    setData();
    recyclerView=findViewById(R.id.recyclerView2);

    // создаем адаптер
    Adapter_class2 adapter = new Adapter_class2(this, model);
    // устанавливаем для списка адаптер
    recyclerView.setAdapter(adapter);
}
private void setData(){
    model.add(new ModelClass2 (R.color.colorAccent,"приседания","x 16"));
    model.add(new ModelClass2(R.color.colorAccent,"jkhjjhgjhhjhjgjkhkjkkjkj","x 21"));
    model.add(new ModelClass2 (R.color.colorAccent,"jdjkgjkdfjgkfdfkhdk","x 10"));
    model.add(new ModelClass2 (R.color.colorAccent,"kjhjklkijdhkhdfdsaaa","x 9"));
}

}

public class ModelClass2 {

private int image_resourse;
private String text_for_ex;
private String text_for_times;

public ModelClass2(int image_resourse, String text_for_ex, String text_for_times) {
    this.image_resourse = image_resourse;
    this.text_for_ex = text_for_ex;
    this.text_for_times = text_for_times;
}

public int getImage_resourse() {
    return this.image_resourse;
}
public String getText_for_ex() {
    return this.text_for_ex;
}
public String getText_for_times() {
    return this.text_for_times;
}

}

public  class Adapter_class2 extends RecyclerView.Adapter<Adapter_class2.ViewHolder> {
private LayoutInflater inflater1;
private List<ModelClass2> modelClass2;

Adapter_class2(Context context, List<ModelClass2> modelClass) {
    this.modelClass2 = modelClass;
    this.inflater1 = LayoutInflater.from(context);
}
@Override
public Adapter_class2.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = inflater1.inflate(R.layout.item_layout2, parent, false);
    return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull Adapter_class2.ViewHolder viewHolder, int i) {
    ModelClass2 model_class = modelClass2.get(i);
    viewHolder.imageView_ex.setImageResource(model_class.getImage_resourse());
  viewHolder.kol_times.setText(model_class.getText_for_times());
  viewHolder.name_exercise.setText(model_class.getText_for_ex());
}

@Override
public int getItemCount() {
    return modelClass2.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
    final TextView name_exercise;
    final TextView kol_times;
    final ImageView imageView_ex;
    final CheckBox checkBox;
    ViewHolder(View view) {
        super(view);
        name_exercise=view.findViewById(R.id.textView11);
        kol_times=view.findViewById(R.id.textView12);
        imageView_ex=view.findViewById(R.id.imageView5);
        checkBox =view.findViewById(R.id.checkBox5);
    }
}

}

При клике на кнопку у меня приложение вылетает

Answer 1

Вы создаёте вручную экземпляр активити и вызываете на нём методы. Это не будет работать, т.к. все работоспособные экземпляры активити создаются системой.

У вас в коде много проблем, в т.ч. неправильное именование переменных, классов, методов, засим не буду описывать сложное и правильное решение, а покажу простое решение:

Измените ваш адаптер так, чтобы он принимал созданный системой экземпляр активити:

public class Adapter_class extends RecyclerView.Adapter<Adapter_class.ViewHolder> {
    private LayoutInflater inflater;
    private List<ModelClass> modelClass;
    Context context1;
    MainActivity mainActivity;
    int positionIndex;
    Adapter_class(MainActivity context, List<ModelClass> modelClass) {
        this.modelClass = modelClass;
        this.inflater = LayoutInflater.from(context);
        this.context1=context;
        this.mainActivity = context;
    }

тут изменена одна строка и одна строка добавлена. После этого ваш код должен заработать.

READ ALSO
Оптимизировать код методов Java

Оптимизировать код методов Java

Есть такая задача: найти максимальную последовательность единиц в матрицеПоследовательность может быть как горизонтальной так и вертикальной

118
Для чего сравнивать this и любой Object o?

Для чего сравнивать this и любой Object o?

Для чего сравнивать this, и любой Object o? В каких случая они могут оказаться равными?

121
Как скрыть метод класса Java?

Как скрыть метод класса Java?

Собственно, как скрыть/сделать не доступными некоторые методы класса? Например, перезаписанные public методы класса-родителя:

136
Как работать со слушателями событий в Canvas?

Как работать со слушателями событий в Canvas?

Можно ли в Android Canvas вешать слушателей на изображения(BitMap) ?

118