繁体   English   中英

如何将一个活动的输入输入到另一个活动的回收视图中?

[英]How do I get the input of an activity into the recyclerview of another activity?

更新的问题:我的 SecondAcitivity 文本显示在 MainActivity 的回收视图中。 但是,Recyclerview 中的文本将被覆盖。 我如何知道我的回收视图中的文本没有被覆盖,而是显示在另一个字段下方的另一个字段中?

我想在我的主要活动中有一个打开活动 2 的按钮。然后应该在那里输入一个文本,然后应该通过单击主要活动的 Recyclerview 中的一个按钮来显示该文本。 我已经插入了recylerview适配器,但是文字不是output。 问题出在哪里?

在我的 XML 上,我有 2 个按钮(一个在 MainActivity(floatingActionButton)中,一个在第二个中(sendNewTask))

我的主要活动:

public class MainActivity extends AppCompatActivity {

RecyclerView recyclerView;
FloatingActionButton floatingActionButton;
TaskManager taskManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    taskManager = new TaskManager(this);
    initViews();
    initClickListener();
    receiveIntent();
    setRecyclerView();

}

protected void initViews(){
    floatingActionButton = findViewById(R.id.floating_button);
    recyclerView = findViewById(R.id.recyclerview);

}

protected void initClickListener(){
    floatingActionButton.setOnClickListener(view -> onOpenButtonClicked());
}

protected void setRecyclerView(){
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setAdapter(new TaskListAdapter(taskManager));
    recyclerView.getAdapter().notifyItemInserted(taskManager.getTaskListCount() - 1);
}

protected void onOpenButtonClicked(){
    Intent i = new Intent(this, TaskActivity.class);
    startActivity(i);
}
protected void receiveIntent(){
    String inputTask = getIntent().getStringExtra("EXTRA_SESSION_TASK");
    Task task = new Task();
    task.setName(inputTask);
    taskManager.addTask(task);
}

}

我的第二个活动:

public class TaskActivity extends AppCompatActivity {

    EditText etAddTask;
    ImageView sendNewTask;

    TaskManager taskManager;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new_task);
        taskManager = new TaskManager(this);
        initViews();
        initClickListener();
    }

    protected void initViews(){
        etAddTask = findViewById(R.id.et_new_task);
        sendNewTask = findViewById(R.id.send_new_task);
    }

    protected void initClickListener(){
        sendNewTask.setOnClickListener(view -> onSendButtonClicked());
    }

    protected void onSendButtonClicked(){
        String newTaskName = etAddTask.getText().toString();
        Task task = new Task();
        task.setName(newTaskName);
        taskManager.addTask(task);
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
    }
}

还有我的 RecyclerAdapter & TaskViewHolder:

public class TaskListAdapter extends RecyclerView.Adapter<TaskViewHolder> {

    TaskManager taskManager;

    public TaskListAdapter(TaskManager taskManager){
        this.taskManager = taskManager;
    }

    @NonNull
    @Override
    public TaskViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new TaskViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.task_row, parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull TaskViewHolder holder, int position) {
        Task task = taskManager.getTaskList().get(position);
        holder.newTask.setText(task.getName());
    }

    @Override
    public int getItemCount() {
        return taskManager.getTaskListCount();
    }
}


public class TaskViewHolder extends RecyclerView.ViewHolder {

    TextView newTask;

    public TaskViewHolder(@NonNull View itemView) {
        super(itemView);
        newTask = itemView.findViewById(R.id.tv_new_task);
    }
}

任务管理器:

public class TaskManager {

    ArrayList<Task> taskList = new ArrayList<>();

    public TaskManager(Context context){
        Hawk.init(context).build();
        loadTaskList();
    }

    public void addTask(Task task){
        taskList.add(task);
        saveTaskList();
    }

    public void removeTask(Task task){
        taskList.remove(task);
        saveTaskList();
    }

    public ArrayList<Task> getTaskList(){
        return taskList;
    }

    public int getTaskListCount(){
        return taskList.size();
    }

    protected void saveTaskList(){
        Hawk.put("taskList", taskList);
    }

    protected void loadTaskList(){
        Hawk.get("taskList", new ArrayList<>());
    }
}

使用 AlertDialog 添加任务

如果您不需要全新的活动来添加新任务,则可以使用 AlertDialog。

public class MainActivity extends AppCompatActivity {
    // ...
    
    protected void onOpenButtonClicked(){
        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
       
        // Here you can set the View you want, even a LinearLayout. In this
        // case, I'm adding a text field so user can type the task name
        final EditText edittext = new EditText(this);
        builder.setTitle("Enter the task name");
        builder.setView(edittext);
   
        alert.setPositiveButton("ADD", (dialog, which) -> {
            // When the user clicks the add button of the dialog, here will
            // be the task name the user has typed, so just add it to the 
            // task manager of this activity
            final String newTaskName = edittext.getText().toString();
        });
        alert.setNegativeButton("CANCEL", (dialog, which) -> {
            // When the user clicks the cancel button of the dialog, just
            // dismiss it without doing any action
            dialog.dismiss();
        });

        alert.create().show();
    }

    // ...
}

保持先前的任务通过 StringArrayList

如果您确实需要一个新活动,您可以使用 ArrayList 并传递它来保留以前的任务。

  • 请求新任务:
public class MainActivity extends AppCompatActivity {
    // ...

    protected void onOpenButtonClicked(){
        final Intent i = new Intent(this, TaskActivity.class);
        
        // Transform the task list to a string list
        final List<String> taskNames = taskManager.getTaskList().stream()
            .map(task -> task.name).collect(Collesctions.toList());
  
        // Put it into the intent and start a new activity
        i.putStringArrayListExtra("TASK_NAME_LIST", new ArrayList<>(taskNames));
        
        startActivity(i);
    }

    // ...
}
  • 获取新任务名称:
public class TaskActivity extends AppCompatActivity {
    // ...

    ArrayList<String> taskNames;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        // ...
    
        final Intent i = getIntent();
        // Receive the current task names
        taskNames = getIntent().getStringArrayListExtra("TASK_NAME_LIST");
    }

    protected void onOpenButtonClicked() {
        final String newTaskName = etAddTask.getText().toString();        
 
        // Add the new task name to the task names
        taskNames.add(newTaskName);

        // Send it back to the MainActivity
        final Intent i = new Intent(this, MainActivity.class);
        i.putStringArrayListExtra("TASK_NAME_LIST", taskNames);

        startActivity(i);
        finish();
    }

    // ...
}
  • 创建新任务:
public class MainActivity extends AppCompatActivity {
    // ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // ...       

        taskManager = new TaskManager(this);
        
        final Intent i = getIntent();
        
        if (i != null) {
            // Receive the new task names
            final List<String> taskNames = getIntent().getStringArrayListExtra("TASK_NAME_LIST");
            
            for (String taskName : taskNames) {
                final Task task = new Task();
                task.setName(taskName);
                taskManager.addTask(task);
            }
        }
    }

    // ...
}

注意:即使在前面的示例中有两个单独的MainActivity方法,您也应该同时包含这两个方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM