【问题标题】:Android - Adding item to ListView from another ActivityAndroid - 从另一个 Activity 将项目添加到 ListView
【发布时间】:2016-12-27 23:08:56
【问题描述】:

首先,我搜索了许多其他帖子,但仍然没有找到解决方法。

MainActivity 包含一个ListView 和一个ImageButton,它接受AddActivity。 这个AddActivity 有一个EditText (nameAddInput) 和一个Button(addButton)。

尽管点击了这个ButtonMainActivity 中的ListView 仍然为空...不明白为什么...

这是MainActivity的代码

public class MainActivity extends AppCompatActivity {

static final int PICK_CONTACT_REQUEST = 0;

private ListView list;
private ArrayAdapter<String> adapter;
private ArrayList<String> arrayList;


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

    list = (ListView) findViewById(R.id.itemsList);
    arrayList = new ArrayList<>();
    adapter = new ArrayAdapter<>(this, R.layout.listview_style1, android.R.id.text1, arrayList);
}

public void onClickAddButton(View view) {
    Intent i = new Intent(MainActivity.this, AddActivity.class);
    startActivityForResult(i, 2);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == PICK_CONTACT_REQUEST) {
        if (resultCode == RESULT_OK) {
            addNewItem();
        }
    }
}

public void addNewItem() {
    Bundle addNameInfo = getIntent().getExtras();
    if(addNameInfo == null)
        return;
    String nameInput = addNameInfo.getString("nameInput");
    arrayList.add(nameInput);
    list.setAdapter(adapter);
    adapter.notifyDataSetChanged();
}

}

MainActivity的xml文件中在ImageButton中:android:onClick="onClickAddButton"

AddActivity的代码

public class AddActivity extends AppCompatActivity {

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

public void backToMain(View view) {
    Intent i = new Intent();
    EditText nameAddInput = (EditText) findViewById(R.id.nameAddInput);
    String userNameText = nameAddInput.getText().toString();
    i.putExtra("nameInput", userNameText);
    setResult(RESULT_OK, i);
    finish();
}

}

AddActivity的xml文件中在Button中:android:onClick="backToMain"

希望有人能帮忙!! 提前谢谢你!

【问题讨论】:

    标签: java android listview arraylist


    【解决方案1】:

    getIntent() 返回启动 MainActivity 的意图,而不是你在 backInMain 中设置的意图

    试试onActivityResult中传递给你的“data”变量?

    也改成

    startActivityForResult(i, PICK_CONTACT_REQUEST);
    

    我还建议您重命名该变量?

    【讨论】:

    • 感谢您的快速回复。我已经像@termigrator 所说的那样尝试过,但仍然无法正常工作。
    • 除上述之外,您还调用了 startActivityForResult(x, 2) (即请求代码 = 2),但在 onActivityResult 回调中,您根据定义为 0 的 PICK_CONTACT_CODE 检查代码。这些数字需要平等。
    【解决方案2】:

    仅在 onCreate 中设置适配器,并在 addNewItem 方法中调用 notifyDataSetChanged。

    【讨论】:

    • 感谢您的快速回复。 'arrayList.add(nameInput); arrayList.add(currentSize++, nameInput); list.setAdapter(适配器);'在 onCreate 方法中进行此操作,并且仅使用 'adapter.notifyDataSetChanged();'在 'addNewItem()' 中?
    【解决方案3】:

    结果值在 onActivityResult 函数的Intent data-Parameter 中返回,而不是在 mainActivity 的意图成员中。

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent    data) {
        if (requestCode == PICK_CONTACT_REQUEST) {
            if (resultCode == RESULT_OK) {
                addNewItem(data.getExtras().getString("nameInput");
           }
       }
    }
    ...
    public void addNewItem(String newItem)
    ...
    

    【讨论】:

    • 感谢您的快速回复。 'public void addNewItem(String nameInput) { arrayList.add(nameInput); list.setAdapter(适配器);适配器.notifyDataSetChanged(); }' 试图改变 'onActivityResult(...)' 方法和上面的这个方法,它仍然无法正常工作..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多