【问题标题】:How to add strings from editText to a listView如何将editText中的字符串添加到listView
【发布时间】:2017-02-15 00:54:00
【问题描述】:

我有一个 MainActivity 和一个 ListView 和一个添加 Button。当用户单击添加Button 时,它会将您带到另一个活动CreateActivity,以便您在editText 框中输入数据或字符串。之后,您单击创建Button 并将strings 添加到ListView 它显示,但每次我尝试将另一个项目添加到ListView 它只是覆盖第一个项目并且不添加转到ListView

带有 listView 和添加按钮的 MainActivity.java

package com.example.brian.inventoryapp;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import static android.R.layout.simple_list_item_1;


public class MainActivity extends AppCompatActivity {

    Button addButton;
    ListView itemListView;
    public static ArrayList<String> arrayList;
    public static ArrayAdapter arrayAdapter;

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



        Bundle editTextData = getIntent().getExtras();

        if(editTextData != null){

            itemListView = (ListView)findViewById(R.id.itemListView);
            String data = editTextData.getString("data");
            arrayList = new ArrayList<String>();
            arrayList.add(data);
            arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, arrayList);
            itemListView.setAdapter(arrayAdapter);

            if(data != ""){

                    arrayAdapter.notifyDataSetChanged();
            }
        }


        addButton = (Button) findViewById(R.id.addButton);
        addButton.setOnClickListener(new View.OnClickListener(){
           @Override
           public void onClick(View v) {
               Intent intent = new Intent(MainActivity.this, CreateActivity.class);
               startActivity(intent);
           }

       });
    }

}

activity_main xml 与 listView 和添加按钮

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout

    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.brian.inventoryapp.MainActivity"
    android:weightSum="1">

    <Button
        android:text="Add"
        android:layout_width="wrap_content"
        android:layout_height="58dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:id="@+id/addButton" />

    <ListView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/itemListView"
         />

</RelativeLayout>

带有四个编辑文本框和创建按钮的 CreateActivity.java

package com.example.brian.inventoryapp;

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

import static com.example.brian.inventoryapp.R.id.editTextItem;

public class CreateActivity extends AppCompatActivity {

    EditText editTextItem;
    EditText editTextModel;
    EditText editTextSerial;
    EditText editTextID;
    Button createButton;

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

        editTextItem = (EditText)findViewById(R.id.editTextItem);
        editTextModel = (EditText)findViewById(R.id.editTextModel);
        editTextSerial = (EditText)findViewById(R.id.editTextSerial);
        editTextID = (EditText)findViewById(R.id.editTextID);
        createButton = (Button) findViewById(R.id.createButton);

        createButton.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                String item = "";
                item = editTextItem.getText().toString().trim() +
                              editTextModel.getText().toString().trim() +
                              editTextSerial.getText().toString().trim() +
                              editTextID.getText().toString().trim();

                Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                intent.putExtra("data", item);
                startActivity(intent);
            }
        });

    }
}

activity_create xml 带有四个编辑文本框和创建按钮

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout

    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_create"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.brian.inventoryapp.CreateActivity">

    <TextView
        android:text="Item Name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/textView" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:ems="10"
        android:layout_below="@+id/textView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/editTextItem" />

    <TextView
        android:text="Model Number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="18dp"
        android:id="@+id/textView2"
        android:layout_below="@+id/editTextItem"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:ems="10"
        android:layout_below="@+id/textView2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/editTextModel" />

    <TextView
        android:text="Serial Number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editTextModel"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="18dp"
        android:id="@+id/textView3" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:ems="10"
        android:layout_below="@+id/textView3"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/editTextSerial" />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@mipmap/ic_launcher"
        android:layout_below="@+id/editTextID"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="64dp"
        android:id="@+id/imageButton" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:ems="10"
        android:id="@+id/editTextID"
        android:layout_below="@+id/editTextSerial"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="18dp" />

    <TextView
        android:text="ID Number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView4"
        android:layout_below="@+id/editTextSerial"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        android:text="Create"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/createButton"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

【问题讨论】:

  • 不要重新开始你的主要活动。使用 startactivityforresult()。您认为它覆盖第一个的原因是您重新启动了 mainactivity 并传递了一项。

标签: java android listview android-intent android-edittext


【解决方案1】:

每次重启MainActivity都会被创建,执行onCreate方法。一个方法可以使用注释方法:use startactivityforResult; 你可以看这个问题 how to manage startactivityforResult。第二种方法是将MainActivity模型设置为SingleInstance。

【讨论】:

    【解决方案2】:

    您一遍又一遍地启动 MainActivity,清除之前加载的所有数据。

    试试这个解决方案

    主要活动:

    package com.example.brian.inventoryapp;
    
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.ListView;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    import static android.R.layout.simple_list_item_1;
    
    
    public class MainActivity extends AppCompatActivity {
        public static final int CREATE_REQUEST = 1;
    
        private Button addButton;
        private ListView itemListView;
        private ArrayList<String> arrayList;
        private ArrayAdapter<String> arrayAdapter;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            itemListView = (ListView) findViewById(R.id.itemListView);
            addButton = (Button) findViewById(R.id.addButton);
    
            arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList);
            itemListView.setAdapter(arrayAdapter);
    
            addButton = (Button) findViewById(R.id.addButton);
            addButton.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(MainActivity.this, CreateActivity.class);
                    startActivityForResult(intent, CREATE_REQUEST);
                }
    
            });
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == CREATE_REQUEST) {
                if (resultCode == RESULT_OK) {
                    String item = data.getStringExtra("data");
                    arrayList.add(item);
                    arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList);
                    itemListView.setAdapter(arrayAdapter);
                }
            }
        }
    }
    

    在您的 CreateActivity 中将 createButton 监听器更改为这个:

     createButton.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                String item = "";
                item = editTextItem.getText().toString().trim() +
                        editTextModel.getText().toString().trim() +
                        editTextSerial.getText().toString().trim() +
                        editTextID.getText().toString().trim();
    
                Intent intent = new Intent();
                intent.putExtra("data", item);
    
                setResult(RESULT_OK, intent);
                finish();
            }
        });
    

    【讨论】:

    • 更新了我的代码,但应用程序在启动时崩溃给我一个致命的异常错误。
    • Main 中的异常目前正试图找出问题所在
    【解决方案3】:

    是的,它将假定 MainActivity 是第一次启动,因此您应该使用 startActivityForResult() 方法而不是 startActivity()。这将继续您的 MainActivity,并且不会覆盖您的列表视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      相关资源
      最近更新 更多