java - 添加新的 ListView 项目并从另一个 Activity 获取项目的值

标签 java android listview android-studio

我正在尝试使用 Android Studio 制作一个“新闻应用程序”。我的主要 Activity 有一个 ListView 和一个 float 按钮。在我的第二个 Activity 中,我得到了两个 TextViews两个 EditViews一个 Button。我想做的是以下内容: 首先,我按下主 Activity 中的 float 按钮。然后第二个 Activity 应该弹出,我在两个 EditText 上书写,然后按按钮。之后,我应该返回主 Activity ,并在那里将一个新项目添加到 ListView 中。新项目应填充第二个 Activity 的 EditText 中的文本。

这是我的主要 Activity :

package news;

import android.content.Intent;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //Get subject value from addpost Activity
        final String new_value = getIntent().getStringExtra("newSubject");

        String [] new_subject = new String []
                {new_value};

        FloatingActionButton add_post_button = findViewById(R.id.post_btn);
        final ListView post_view = findViewById(R.id.news_feed);
        //Create Adapter to add the new subject to listview
        if (new_subject != null) {
            ArrayAdapter newslist_adapter = new ArrayAdapter(
                    MainActivity.this,
                    android.R.layout.simple_expandable_list_item_1, new_subject);
            post_view.setAdapter(newslist_adapter);
        }
        add_post_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, addpost_activity.class);
                MainActivity.this.startActivity(intent);
            }
        });
    }
}

这是第二个 Activity (addpost_activity):

package news;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.content.Intent;
import android.widget.EditText;
import android.widget.ListView;

import java.util.ArrayList;


public class addpost_activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_addpost_activity);

        Button post_button = findViewById(R.id.post_btn);
        final EditText subject_text = findViewById(R.id.subject_edit);

        post_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(subject_text.getText() != null) {
                    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                    intent.putExtra("newSubject", subject_text.getText().toString());
                    startActivity(intent);
                }
            }
        });
    }
}

我现在的问题是每次启动应用程序都会崩溃。我还从我的日志中收到此消息:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference

<小时/>

已解决: 感谢 Munir,问题解决了。

这是我的 Activity

主要 Activity :

package news;

import android.app.Activity;
import android.content.Intent;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    ArrayAdapter newslist_adapter;
    ArrayList<String> new_subject = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FloatingActionButton add_post_button = findViewById(R.id.post_btn);

        //Create Adapter to add the new subject to listview
        add_post_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, addpost_activity.class);
                startActivityForResult(intent, 1);

            }
        });

    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        final ListView post_view = findViewById(R.id.news_feed);
        if (requestCode == 1) {
            if(resultCode == Activity.RESULT_OK){
                String new_value = data.getStringExtra("newSubject");
                new_subject.add(new_value);
                newslist_adapter = new ArrayAdapter(
                        MainActivity.this,
                        android.R.layout.simple_expandable_list_item_1, new_subject);
                post_view.setAdapter(newslist_adapter);

            }
        }
    }
} 

这是我的第二个 Activity (addpost_activity):

package news;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.content.Intent;
import android.widget.EditText;
import android.widget.ListView;

import java.util.ArrayList;


public class addpost_activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_addpost_activity);

        Button post_button = findViewById(R.id.post_btn);
        final EditText subject_text = findViewById(R.id.subject_edit);

        post_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(subject_text.getText() != null) {
                    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                    intent.putExtra("newSubject", subject_text.getText().toString());
                    setResult(Activity.RESULT_OK, intent);
                    finish();
                }
            }
        });
    }
}

最佳答案

为此,我建议使用 Fragments 而不是两个 Activity。然后,MainActivity 保存您的所有数据。

参见Fragments guide .

关于java - 添加新的 ListView 项目并从另一个 Activity 获取项目的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47202613/

相关文章:

java - 正则表达式匹配超出应有的范围

java - 在 Resteasy + Netty 服务器上实现跨源资源共享(CORS)

android - 如何在模拟器上运行 Google Glass Project?

安卓应用开发 : Databases

android - 如何在 android 中使用 firebase 获取推送通知的设备 ID

mysql - 在 vb.net 中使用 mysql 填充 ListView 的速度

Android SectionList 和 Holder

java - 使用 JPA Criteria Query 比较两个日期之间的差异

android - ListView 选择器颜色选择所有对象,而不是每个项目

java - Android:当我还在 View 上设置 layoutParams 时,在 View 上调用 setPadding() 不起作用