如何将项目从Edittext添加到ListView?

时间:2019-05-10 16:31:56

标签: java android

我已经努力了几个小时,但是我仍然不知道为什么最新的edittext值会覆盖旧的listview项目。

问题是,假设我在编辑文本中键入字符串s1,然后按添加到列表视图按钮,然后成功输入了字符串s1。现在,如果我在编辑文本中键入字符串s2并按添加到列表视图按钮,则字符串s2现在将替换列表视图中的s1,因此现在它只是在我的列表视图中显示s2。我该如何解决?

这是我的代码:

String str=edittext.getText().toString();
List<String> list = new ArrayList<String>();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(My_activity.this, android.R.layout.simple_list_item_multiple_choice, list);
add.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
                         if(str.length()!=0) {
                                list.add(str);
                               }

                   listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
                   listView.setAdapter(adapter);
                   adapter.notifyDataSetChanged();
});

编辑:我试图从一个活动中获取输入字符串,并尝试将其添加到另一个活动的列表视图中。这就是问题所在。请帮助我。

第一个活动:

public static String str;
add.setOnClickListener(new (new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                             str=edittext.gettext().toString();
}
});

第二次活动:

    List<String> list = new ArrayList<String>();
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(My_activity.this, android.R.layout.simple_list_item_multiple_choice, list);

    if (Main_activity.i == R.id.event_1 || Main_activity.i == R.id.rem_1) {
     listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
     listView.setAdapter(adapter);
 if(str.length()!=0) {
                    list.add(str);
                    adapter.notifyDataSetChanged();
                }
    else{
     Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "No 
     text found", Snackbar.LENGTH_LONG);
     snackbar.show();
    }
    }

3 个答案:

答案 0 :(得分:1)

public class ListViewExample extends AppCompatActivity {

List<String> list = new ArrayList<String>();
ListView listView;
EditText editText;
ArrayAdapter<String> adapter;
FloatingActionButton fab

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_text_view_example);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    listView = (ListView) findViewById(R.id.listView);
    editText = (EditText) findViewById(R.id.et);
    fab = findViewById(R.id.fab);
    adapter = new ArrayAdapter<String>(ListViewExample.this, android.R.layout.simple_list_item_multiple_choice, list);
    listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    listView.setAdapter(adapter);

    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String name = editText.getText().toString().trim();
            if(!name.isEmpty()) {
                list.add(name);
                adapter.notifyDataSetChanged();
                editText.setText("");
            }
        }
    });
}

这是我的活动,这对我有用。

答案 1 :(得分:0)

尽管上面的代码是正确的,但是请尝试模块化您的代码。调试和按顺序进行调试将使您的生活变得更轻松。见下文

private final List<String> list = new ArrayList<>();
private ArrayAdapter<String> mAdapter;
private EditText editText;

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

public void initViews() {
  editText = findViewById(R.id.et);
  Button addOptionsBtn = findViewById(R.id.button);
  addOptionsBtn.setOnClickListener(new View.OnClickListener() {
    @Override public void onClick(View v) {
      addOptionToList();
    }
  });

  mAdapter =
      new ArrayAdapter<>(getBaseContext(), 
        android.R.layout.simple_list_item_multiple_choice,
        list);
 ListView listView = findViewById(R.id.options_list_view);
 listView.setAdapter(mAdapter);
}

private void addOptionToList() {
  String option = editText.getText().toString();
  if (option.isEmpty()) {
      return;
  }
  list.add(option);
  mAdapter.clear();
  mAdapter.addAll(list);
  mAdapter.notifyDataSetChanged();
}

答案 2 :(得分:0)

我终于找到了解决方案。我猜适配器在获得新物品后没有更新。所以我所做的是:

第一个活动:

<?php
include_once 'session.php';

echo 'dashboard';

第二次活动:

s3_object = s3client.get_object(Bucket=bucket_name, Key=file_name)
wholefile = s3_object['Body'].read()
fileobj = io.BytesIO(wholefile)
tarf = tarfile.open(fileobj=fileobj)
names = tarf.getnames()
for name in names:
    print(name)