所以我正在尝试做我的编码作业,我必须在 Android studio 中编写一个 Java 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<Note> 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<Note> 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();
}
}
我已经尝试了多种方法,例如不同类型的线程等,但似乎没有任何效果
你不能在
static
方法中访问 non-static
变量或方法,这是一条规则。在您的代码中看到 changeDate()
和 changeText()
方法是静态方法,您尝试在 onContextItemSelected() 方法内调用它们,该方法不是静态方法。
建议:如果可能的话,您可以将这两个方法放在同一个活动中
MainActivity
,并像这样保持它们非静态并尝试调用它们。
public void changeText(TextView textView, String newText) {
textView.setText(newText);
}
public void changeDate(LocalDate newDate){
datePicker.updateDate(newDate.getYear(),newDate.getMonthValue(),newDate.getDayOfMonth());
}