У меня есть основной класс, в котором есть кнопка CardView
и одна кнопка добавления. Нажав добавить Button
, мы можем добавить карточку ниже. Принцип работы заключается в том, что я включил макет card.xm
l в свой основной класс в качестве добавляемого макета контейнера.
Теперь я хочу присвоить каждой карте номер (набор), в основном отображать 1, 2, 3 и т. д., Который увеличивается с каждым добавленным представлением карты ниже основного вверху.
Однако, когда я увеличиваю число в методе addcard
, приложение вылетает.
В основном классе:
int set = 1;
в методе onCreate
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cardsscreen);
add = findViewById(R.id.addperff);
layout = findViewById(R.id.container);
textView2 = findViewById(R.id.textViewSets);
textView2.setText(""+set);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addCard();
}
});
Intent secondIntent = getIntent(); //getting the title from other class
String message = secondIntent.getStringExtra("One");
TextView textView = (TextView) findViewById(R.id.type);
textView.setText(message);
}
private void addCard() {
final View view = getLayoutInflater().inflate(R.layout.card, null);
++set;
TextView textView3 = findViewById(R.id.textViewSets2);
textView3.setText(""+set);
layout.addView(view);
}
}
В основном у меня есть горизонтальный макет с текстом (представлениями) сверху и текстами редактирования для пользователя, вводимого в число. Горизонтальная раскладка с 3 картами в основном.
Я получаю фатальное исключение, по-видимому, вызванное методом addCard. Когда я нажимаю кнопку добавления, приложение закрывается в основном. java.lang.NullPointerException: попытка вызвать виртуальный метод «void android.widget.TextView.setText(java.lang.CharSequence)» для ссылки на нулевой объект в com.example.myapp.app.MyActivity.addCard
Я думаю, что нашел причину этого: я не могу получить доступ к текстовому представлению из файла card.xml здесь, в моем основном классе. Когда я ставлю "setContentView(R.layout.card);" в методе добавления перед текстовым представлением я получаю карточку с отображаемым правильным номером. Но, конечно, я получаю только одну карту сейчас (карта номер 2). Возможно, мне нужно изменить строку «final View view = getLayoutInflater().inflate(R.layout.card, null);» ?
Можете ли вы обновить вопрос, включив в него трассировку стека вместе с полным методом создания? Кроме того, что вы подразумеваете под main class
? Вы находитесь внутри действия или фрагмента?
@Naveed Я внутри активности, да.
Я видел, что люди с похожими задачами работают с классом адаптера. Например здесь: stackoverflow.com/questions/59413480/… Но опять же, у меня нет фиксированной длины, так как я добавляю карты вручную. Я бы знал, как это сделать, если бы это был список изображений, положение которых я хочу получить.
Почему бы вам не попробовать это?:
private void addCard() {
final View view = getLayoutInflater().inflate(R.layout.card, null);
++set;
TextView textView = new TextView(this);
textView.setText(""+set);
layout.addView(view);
}
Спасибо, но, к сожалению, нет. Возможно, это сработало бы, если бы у меня было только 1 текстовое представление в ресурсе макета карты. Но на самом деле у меня их много. В основном у меня есть горизонтальный макет с текстом (представлениями) сверху и текстами редактирования для пользователя, вводимого в число. Горизонтальная раскладка с 3 картами в основном. Еще раз спасибо и извините, если я плохо объясняю.
Попробуйте изменить
TextView textView3 = findViewById(R.id.textViewSets2);
к
TextView textView3 = view.findViewById(R.id.textViewSets2);
Я предполагаю, что это R.id.textViewSets2
находится внутри только что увеличенного представления, а не внутри вашей активности в этот момент.
Какая у вас ошибка? Добавьте его к своему вопросу. Также укажите, на какой строке происходит сбой