如何在 onCreate() 之外设置 Text() TextView?

问题描述 投票:0回答:1

所以我正在尝试做我的编码作业,我必须在 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();
    }
}

我已经尝试了多种方法,例如不同类型的线程等,但似乎没有任何效果

java android
1个回答
0
投票

你不能在

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());

    }

© www.soinside.com 2019 - 2024. All rights reserved.