listView dynamic add item

前端 未结 4 1006
攒了一身酷
攒了一身酷 2020-11-28 12:46

I used ListView to dynamic add item,but there is a problem about not Smooth add. there are textView and button in my listActivity,Iwant to Press button ,then

相关标签:
4条回答
  • 2020-11-28 13:15

    I use a thread to add more data to my list in background and then notifydatasetchange, It work successfully

    Here are complete code : http://code.google.com/p/dynamic-listview/source/checkout

    0 讨论(0)
  • 2020-11-28 13:17

    Is your getBtnClickListener method part of the ListActivity or ArrayAdapter class?

    For me, when I update from the ListActivity class, I use this code...

    // 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);
    

    When I am updating from a method inside the ArrayAdapter class, I use this code...

     // 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;
         });
    
    0 讨论(0)
  • 2020-11-28 13:27

    notifyDataSetChanged() method is used to update the adapter.

    Here I am posting a working answer steps by step.

    First of main.xml file :

    <?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>
    

    Here 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;
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-28 13:31

    Yes!!, the method notifyDataSetChanged() applied in the ArrayAdapter before you fulling him, was the solution for me. Reading from Firebase.

    Objects

        private DatabaseReference myRef;
        ArrayList<String> lista;
        ArrayAdapter<String> adapter;
    

    OnCreate

        FirebaseDatabase database = FirebaseDatabase.getInstance();
        myRef = database.getReference("chat");
    
        //GETTIN MY DATA TO SHOW IN CHAT
        lista = new ArrayList<String>();
    

    OnResume

        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);
    
    0 讨论(0)
提交回复
热议问题