我已经努力了几个小时,但是我仍然不知道为什么最新的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();
}
}
答案 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)