Android listView动态添加项
我使用了Android listView动态添加项,android,listview,Android,Listview,我使用了ListView来动态添加项目,但存在一个添加不顺畅的问题。 我的listActivity中有textView和按钮,我想按一下按钮,然后textView的文本可以自动添加到ListView,但我按了按钮,它不工作,除非我输入内容后,按“OK”键,然后按一下按钮,textView的文本可以自动添加到ListView。我不知道为什么。如果我连续按了3次按钮,然后按“Ok”键,内容就会消失 自动添加列表 只看3次 public class DynamicListItems extends
ListView
来动态添加项目,但存在一个添加不顺畅的问题。
我的listActivity中有textView和按钮,我想按一下按钮,然后textView
的文本可以自动添加到ListView
,但我按了按钮,它不工作,除非我输入内容后,按“OK”键,然后按一下按钮,textView的
文本可以自动添加到ListView
。我不知道为什么。如果我连续按了3次按钮,然后按“Ok”键,内容就会消失
自动添加列表
只看3次
public class DynamicListItems extends ListActivity {
private static final String ITEM_KEY = "key";
ArrayList<HashMap<String, String>> list= new ArrayList<HashMap<String, String>>();
private SimpleAdapter adapter;
private EditText newValue;@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dynamic_list);
newValue = (EditText) findViewById(R.id.new_value_field);
setListAdapter(new SimpleAdapter(this, list, R.layout.row, new String[] { ITEM_KEY }, new int[] { R.id.list_value }));
((ImageButton) findViewById(R.id.button)).setOnClickListener(getBtnClickListener());
}
private OnClickListener getBtnClickListener() {
return new OnClickListener() {
public void onClick(View view) {
try {
HashMap<String, String> item = new HashMap<String, String>();
item.put(ITEM_KEY, newValue.getText().toString());
list.add(item);
adapter.notifyDataSetChanged();
} catch (NullPointerException e) {
Log.i("[Dynamic Items]", "Tried to add null value");
}
}
};
}}
公共类DynamicListItems扩展了ListActivity{
私有静态最终字符串项\u KEY=“KEY”;
ArrayList=新建ArrayList();
专用SimpleAdapter适配器;
私有EditText newValue;@Override
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.dynamic_列表);
newValue=(EditText)findViewById(R.id.new\u value\u字段);
setListAdapter(新SimpleAdapter(this,list,R.layout.row,新字符串[]{ITEM_KEY},新int[]{R.id.list_value}));
((ImageButton)findViewById(R.id.button)).setOnClickListener(getbtnclicklListener());
}
私有OnClickListener getbtnclicklListener(){
返回新的OnClickListener(){
公共void onClick(视图){
试一试{
HashMap项=新建HashMap();
item.put(item_键,newValue.getText().toString());
列表。添加(项目);
adapter.notifyDataSetChanged();
}捕获(NullPointerException e){
Log.i(“[动态项]”,“试图添加空值”);
}
}
};
}}
如何动态删除项目
- dynamic_list.xml仅包含listView、button和textView
- row.xml包含
TextView
getBtnClickListener
方法是ListActivity
或ArrayAdapter
类的一部分吗
对我来说,当我从ListActivity
类更新时,我使用以下代码
// code to add a Contact to my database
// code to add a Contact to the list that
// that is used by the ListView
setListAdapter(adapter);
getListView().setTextFilterEnabled(true);
// from a LongPress on a ListView item
convertView.setOnLongClickListener(new OnLongClickListener(){
@Override
public boolean onLongClick(View view) {
view.performHapticFeedback(0, View.HAPTIC_FEEDBACK_ENABLED);
// code to remove a Contact name from my database
// code to remove that Contact name from my list
// that is used by the ListView
ContactsAdapter.this.notifyDataSetChanged();
return true;
});
当我从ArrayAdapter
类中的方法进行更新时,我使用以下代码
// code to add a Contact to my database
// code to add a Contact to the list that
// that is used by the ListView
setListAdapter(adapter);
getListView().setTextFilterEnabled(true);
// from a LongPress on a ListView item
convertView.setOnLongClickListener(new OnLongClickListener(){
@Override
public boolean onLongClick(View view) {
view.performHapticFeedback(0, View.HAPTIC_FEEDBACK_ENABLED);
// code to remove a Contact name from my database
// code to remove that Contact name from my list
// that is used by the ListView
ContactsAdapter.this.notifyDataSetChanged();
return true;
});
notifyDataSetChanged()方法用于更新适配器 在这里,我发布了一个工作的答案一步一步 main.xml文件的第一个:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:id="@+id/input">
<EditText
android:id="@+id/editText_input"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10" >
<requestFocus />
</EditText>
<Button
android:id="@+id/button_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:text="Add" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_above="@+id/input"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:orientation="vertical" >
<ListView
android:id="@+id/listView_items"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
</RelativeLayout>
此处MainActivity.java:
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
public class MainActivity extends Activity {
private EditText etInput;
private Button btnAdd;
private ListView lvItem;
private ArrayList<String> itemArrey;
private ArrayAdapter<String> itemAdapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dyanamic_list);
setUpView();
}
private void setUpView() {
etInput = (EditText)this.findViewById(R.id.editText_input);
btnAdd = (Button)this.findViewById(R.id.button_add);
lvItem = (ListView)this.findViewById(R.id.listView_items);
itemArrey = new ArrayList<String>();
itemArrey.clear();
itemAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,itemArrey);
lvItem.setAdapter(itemAdapter);
btnAdd.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
addItemList();
}
});
etInput.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER) {
addItemList();
}
return true;
}
});
}
protected void addItemList() {
if (isInputValid(etInput)) {
itemArrey.add(0,etInput.getText().toString());
etInput.setText("");
itemAdapter.notifyDataSetChanged();
}
}
protected boolean isInputValid(EditText etInput2) {
if (etInput2.getText().toString().trim().length()<1) {
etInput2.setError("Please Enter Item");
return false;
} else {
return true;
}
}
}
import java.util.ArrayList;
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.KeyEvent;
导入android.view.view;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ListView;
公共类MainActivity扩展了活动{
私人编辑文本输入;
专用按钮btnAdd;
私有ListView项目;
私人ArrayList itemArrey;
专用ArrayAdapter项适配器;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.dyanamic_列表);
setUpView();
}
私有void setUpView(){
etInput=(EditText)this.findViewById(R.id.EditText\u输入);
btnAdd=(Button)this.findviewbyd(R.id.Button\u add);
lvItem=(ListView)this.findViewById(R.id.ListView\u items);
ItemArray=新的ArrayList();
itemArrey.clear();
itemAdapter=newArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,itemArray);
lvItem.setAdapter(itemAdapter);
btnAdd.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
addItemList();
}
});
etInput.setOnKeyListener(新视图.OnKeyListener(){
公共布尔onKey(视图v、int keyCode、KeyEvent事件){
if(keyCode==KeyEvent.keyCode\u输入){
addItemList();
}
返回true;
}
});
}
受保护的void addItemList(){
如果(isInputValid(etInput)){
add(0,etInput.getText().toString());
setText(“”);
itemAdapter.notifyDataSetChanged();
}
}
受保护的布尔值isInputValid(EditText etInput2){
如果(etInput2.getText().toString().trim().length()我在后台使用线程将更多数据添加到列表中,然后使用notifydatasetchange
,它将成功工作
以下是完整的代码:Yes!!,在填充ArrayAdapter之前,在ArrayAdapter中应用的notifyDataSetChanged()方法是我的解决方案。阅读Firebase
物体
private DatabaseReference myRef;
ArrayList<String> lista;
ArrayAdapter<String> adapter;
私有数据库参考myRef;
ArrayList lista;
阵列适配器;
一次创建
FirebaseDatabase database = FirebaseDatabase.getInstance();
myRef = database.getReference("chat");
//GETTIN MY DATA TO SHOW IN CHAT
lista = new ArrayList<String>();
FirebaseDatabase=FirebaseDatabase.getInstance();
myRef=database.getReference(“chat”);
//获取要在聊天中显示的数据
lista=新的ArrayList();
恢复
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnappy : dataSnapshot.getChildren()){
for (DataSnapshot rePostSnappy : postSnappy.getChildren()){
// Defined Array values to show in ListView
lista.add(new String(rePostSnappy.getValue().toString()));
adapter.notifyDataSetChanged();//Notyfing adapter that will goes to change
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, lista);
ListView listVista = (ListView) findViewById(R.id.list);
listVista.setAdapter(adapter);
myRef.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
对于(DataSnapshot postSnappy:DataSnapshot.getChildren()){
对于(DataSnapshot rePostSnappy:postSnappy.getChildren()){
//要在ListView中显示的已定义数组值
add(新字符串(rePostSnappy.getValue().toString());
adapter.notifyDataSetChanged();//通知将要更改的适配器
}
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
适配器=新阵列适配器(此,
android.R.layout.simple_list_item_1,lista);
ListView listVista=(ListView)findViewById(R.id.list);
setAdapter(适配器);
谢谢