Anonymous
Как установить Text() TextView вне onCreate()?
Сообщение
Anonymous » 07 май 2024, 10:08
Итак, я пытаюсь выполнить домашнее задание по программированию: мне нужно написать Java-приложение для Android в студии Android, которое управляет и создает для вас список задач/заметки. Должна быть возможность редактировать заметки, для этой функции (и для создания новой заметки) я использую дополнительную активность (notesActivity). Когда используется «Редактировать», макет заметок должен быть открыт с деталями заметок, подлежащими редактированию (название, дата, содержимое), но я просто не могу использовать setText() и updateDate() для представлений. Почему это? Ниже я предоставил свои классы.
Код: Выделить всё
package net.htlgkr.todoapp;
import static net.htlgkr.todoapp.NoteActivity.changeContent;
import static net.htlgkr.todoapp.NoteActivity.changeDate;
import static net.htlgkr.todoapp.NoteActivity.changeText;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.DatePicker;
import android.widget.ListView;
import android.widget.TextView;
import java.time.LocalDate;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
TextView titleTextBox;
DatePicker datePicker;
TextView contentTextBox;
public static ArrayList noteList = new ArrayList();
ListView noteListView;
NotesAdapter notesAdapter;
boolean mainIsActive = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
noteListView = findViewById(R.id.noteListView);
notesAdapter = new NotesAdapter(this,R.layout.list_view_layout,noteList);
noteListView.setAdapter(notesAdapter);
registerForContextMenu(noteListView);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.toolbar_menu, menu);
configActionBar();
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
if(id == R.id.action_new){
switchToNoteActivity();
}
else if(id == R.id.action_save){
}
else if(id == android.R.id.home && !mainIsActive){
switchToMainActivity();
}
return super.onOptionsItemSelected(item);
}
private void configActionBar() {
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle("Albert Notes");
actionBar.setDisplayHomeAsUpEnabled(true);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo){
super.onCreateContextMenu(menu,v,menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.note_menu,menu);
}
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
titleTextBox = findViewById(R.id.displayTitleTextBox);
datePicker = findViewById(R.id.datePicker);
contentTextBox = findViewById(R.id.contentTextBox);
AdapterView.AdapterContextMenuInfo i = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
int id = item.getItemId();
if(id == R.id.action_delete){
noteList.remove(i.position);
notesAdapter.notifyDataSetChanged();
return true;
}
else if(id == R.id.action_edit){
Note editedNote = noteList.get(i.position);
String title = editedNote.getTitle();
Log.d("EDITED TITLE",title);
String content = editedNote.getContent();
LocalDate date = editedNote.getDate();
switchToNoteActivity();
changeText(titleTextBox,title);
//changeText(contentTextBox,content);
//changeDate(date);
return true;
}
else if(id == R.id.action_view){
}
return super.onContextItemSelected(item);
}
public void switchToMainActivity(){
startActivity(new Intent(this, MainActivity.class));
finish();
mainIsActive = true;
}
public void switchToNoteActivity(){
startActivity(new Intent(this, NoteActivity.class));
finish();
mainIsActive = false;
}
}
Код: Выделить всё
package net.htlgkr.todoapp;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import java.time.LocalDate;
import java.util.ArrayList;
public class NoteActivity extends AppCompatActivity {
static TextView titleTextBox;
static TextView contentTextBox;
static DatePicker datePicker;
static NoteActivity noteActivity;
public static ArrayList noteList = MainActivity.noteList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
titleTextBox = findViewById(R.id.displayTitleTextBox);
contentTextBox = findViewById(R.id.contentTextBox);
datePicker = findViewById(R.id.datePicker);
setContentView(R.layout.activity_note);
}
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.toolbar_menu, menu);
configActionBar();
return super.onCreateOptionsMenu(menu);
}
private void configActionBar() {
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle("Albert Notes");
actionBar.setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
if(id == R.id.action_new){
switchToNoteActivity();
}
else if(id == R.id.action_save){
}
else if(id == android.R.id.home){
switchToMainActivity();
}
return super.onOptionsItemSelected(item);
}
public void saveButtonOnClick(View view){
TextView titleTextBox = findViewById(R.id.displayTitleTextBox);
DatePicker dateView = findViewById(R.id.datePicker);
TextView content = findViewById(R.id.contentTextBox);
String titleString = String.valueOf(titleTextBox.getText());
String contentString = String.valueOf(content.getText());
int day = dateView.getDayOfMonth();
int month = dateView.getMonth();
int year = dateView.getYear();
LocalDate date = LocalDate.of(year, month, day);
Note newNote = new Note(titleString, date, contentString);
noteList.add(newNote);
Log.d("Eintrag getätigt", noteList.get(noteList.size()-1).getTitle());
switchToMainActivity();
}
public static void changeText(TextView textView, String newText) {
textView.setText(newText);
}
public static void changeContent(String newContent){
contentTextBox.setText(newContent);
}
public static void changeDate(LocalDate newDate){
datePicker.updateDate(newDate.getYear(),newDate.getMonthValue(),newDate.getDayOfMonth());
}
public void switchToMainActivity(){
startActivity(new Intent(this, MainActivity.class));
finish();
}
public void switchToNoteActivity(){
startActivity(new Intent(this, NoteActivity.class));
finish();
}
}
Я уже пробовал несколько вещей, например разные типы потоков и т. д., но ничего не помогает
Подробнее здесь:
https://stackoverflow.com/questions/784 ... f-oncreate
1715065695
Anonymous
Итак, я пытаюсь выполнить домашнее задание по программированию: мне нужно написать Java-приложение для Android в студии Android, которое управляет и создает для вас список задач/заметки. Должна быть возможность редактировать заметки, для этой функции (и для создания новой заметки) я использую дополнительную активность (notesActivity). Когда используется «Редактировать», макет заметок должен быть открыт с деталями заметок, подлежащими редактированию (название, дата, содержимое), но я просто не могу использовать setText() и updateDate() для представлений. Почему это? Ниже я предоставил свои классы. [code]package net.htlgkr.todoapp; import static net.htlgkr.todoapp.NoteActivity.changeContent; import static net.htlgkr.todoapp.NoteActivity.changeDate; import static net.htlgkr.todoapp.NoteActivity.changeText; import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.ContextMenu; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.DatePicker; import android.widget.ListView; import android.widget.TextView; import java.time.LocalDate; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { TextView titleTextBox; DatePicker datePicker; TextView contentTextBox; public static ArrayList noteList = new ArrayList(); ListView noteListView; NotesAdapter notesAdapter; boolean mainIsActive = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); noteListView = findViewById(R.id.noteListView); notesAdapter = new NotesAdapter(this,R.layout.list_view_layout,noteList); noteListView.setAdapter(notesAdapter); registerForContextMenu(noteListView); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.toolbar_menu, menu); configActionBar(); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { int id = item.getItemId(); if(id == R.id.action_new){ switchToNoteActivity(); } else if(id == R.id.action_save){ } else if(id == android.R.id.home && !mainIsActive){ switchToMainActivity(); } return super.onOptionsItemSelected(item); } private void configActionBar() { ActionBar actionBar = getSupportActionBar(); actionBar.setTitle("Albert Notes"); actionBar.setDisplayHomeAsUpEnabled(true); } @Override public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo){ super.onCreateContextMenu(menu,v,menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.note_menu,menu); } @Override public boolean onContextItemSelected(@NonNull MenuItem item) { titleTextBox = findViewById(R.id.displayTitleTextBox); datePicker = findViewById(R.id.datePicker); contentTextBox = findViewById(R.id.contentTextBox); AdapterView.AdapterContextMenuInfo i = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); int id = item.getItemId(); if(id == R.id.action_delete){ noteList.remove(i.position); notesAdapter.notifyDataSetChanged(); return true; } else if(id == R.id.action_edit){ Note editedNote = noteList.get(i.position); String title = editedNote.getTitle(); Log.d("EDITED TITLE",title); String content = editedNote.getContent(); LocalDate date = editedNote.getDate(); switchToNoteActivity(); changeText(titleTextBox,title); //changeText(contentTextBox,content); //changeDate(date); return true; } else if(id == R.id.action_view){ } return super.onContextItemSelected(item); } public void switchToMainActivity(){ startActivity(new Intent(this, MainActivity.class)); finish(); mainIsActive = true; } public void switchToNoteActivity(){ startActivity(new Intent(this, NoteActivity.class)); finish(); mainIsActive = false; } } [/code] [code]package net.htlgkr.todoapp; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.DatePicker; import android.widget.EditText; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import java.time.LocalDate; import java.util.ArrayList; public class NoteActivity extends AppCompatActivity { static TextView titleTextBox; static TextView contentTextBox; static DatePicker datePicker; static NoteActivity noteActivity; public static ArrayList noteList = MainActivity.noteList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); titleTextBox = findViewById(R.id.displayTitleTextBox); contentTextBox = findViewById(R.id.contentTextBox); datePicker = findViewById(R.id.datePicker); setContentView(R.layout.activity_note); } public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.toolbar_menu, menu); configActionBar(); return super.onCreateOptionsMenu(menu); } private void configActionBar() { ActionBar actionBar = getSupportActionBar(); actionBar.setTitle("Albert Notes"); actionBar.setDisplayHomeAsUpEnabled(true); } @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { int id = item.getItemId(); if(id == R.id.action_new){ switchToNoteActivity(); } else if(id == R.id.action_save){ } else if(id == android.R.id.home){ switchToMainActivity(); } return super.onOptionsItemSelected(item); } public void saveButtonOnClick(View view){ TextView titleTextBox = findViewById(R.id.displayTitleTextBox); DatePicker dateView = findViewById(R.id.datePicker); TextView content = findViewById(R.id.contentTextBox); String titleString = String.valueOf(titleTextBox.getText()); String contentString = String.valueOf(content.getText()); int day = dateView.getDayOfMonth(); int month = dateView.getMonth(); int year = dateView.getYear(); LocalDate date = LocalDate.of(year, month, day); Note newNote = new Note(titleString, date, contentString); noteList.add(newNote); Log.d("Eintrag getätigt", noteList.get(noteList.size()-1).getTitle()); switchToMainActivity(); } public static void changeText(TextView textView, String newText) { textView.setText(newText); } public static void changeContent(String newContent){ contentTextBox.setText(newContent); } public static void changeDate(LocalDate newDate){ datePicker.updateDate(newDate.getYear(),newDate.getMonthValue(),newDate.getDayOfMonth()); } public void switchToMainActivity(){ startActivity(new Intent(this, MainActivity.class)); finish(); } public void switchToNoteActivity(){ startActivity(new Intent(this, NoteActivity.class)); finish(); } } [/code] Я уже пробовал несколько вещей, например разные типы потоков и т. д., но ничего не помогает Подробнее здесь: [url]https://stackoverflow.com/questions/78437515/how-to-settext-textview-outside-of-oncreate[/url]