Flowdorio
Flowdorio

Reputation: 157

Adding objects to listview dynamically from other class in android

My project includes an "accept/deny incoming data" window that on "accept" should add the incoming data dynamically to a listview and the database that the listview gets the data from. My listadapter is an inner class.

My code in the main class relating to the populating of the listview:

public class MainActivity extends Activity {

    private List<Assignment> allDeliveries= new ArrayList<Assignment>();
     

    
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        populateDeliveryList();
        populateListView();
        registerClickCallBack();
        final MySQLiteHelper db = new MySQLiteHelper(this);

        accept.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                RelativeLayout newdeliverylayout= (RelativeLayout) findViewById(R.id.newdeliverylayout);
                allDeliveries.add(incomingAssignment);
                db.addAssignment(incomingAssignment);
                MyListAdapter adapter = new MyListAdapter();
                adapter.notifyDataSetChanged();
            }
        });
        deny.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                RelativeLayout newdeliverylayout= (RelativeLayout) findViewById(R.id.newdeliverylayout);
                newdeliverylayout.setVisibility(RelativeLayout.GONE);
            }
        });

    private void populateDeliveryList() {
        MySQLiteHelper db = new MySQLiteHelper(this);
                List<Assignment> list = db.getAllAssignments();
        for (int i = 0; i < list.size();i++)
        {
            allDeliveries.add(list.get(i));
        }
    }
                                            
    private void populateListView() {
        ArrayAdapter<Assignment> adapter = new MyListAdapter();
        ListView list = (ListView) findViewById(R.id.deliveriesListView);
        list.setAdapter(adapter);
    }                                           


                                       
}

This is my inner class, the listadapter:

    private class MyListAdapter extends ArrayAdapter<Assignment> {
        public MyListAdapter() {
            super(MainActivity.this, R.layout.item_view, allDeliveries);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            View itemView = convertView;
            if (itemView == null) {
                itemView = getLayoutInflater().inflate(R.layout.item_view, parent, false);
            }

            Assignment nyDelivery = allDeliveries.get(position);


            TextView adressText = (TextView) itemView.findViewById(R.id.item_adressView);
            adressText.setText(nyDelivery.getAdress());

            TextView zipText = (TextView) itemView.findViewById(R.id.item_zipcodePlaceView);
            zipText.setText(nyDelivery.getZipcode());

            TextView companyText = (TextView) itemView.findViewById(R.id.item_companyView);
            companyText.setText(nyDelivery.getSenderreceiver());

            TextView typeText = (TextView) itemView.findViewById(R.id.item_driveTypeView);
            typeText.setText(nyDelivery.getType() + nyDelivery.getID());

            return itemView;
        }
    }
}

The code in "accept" seems to do nothing except adding the incoming assignment to the database.

Upvotes: 2

Views: 956

Answers (1)

faljbour
faljbour

Reputation: 1377

It is a simple change of declaring MyListAdapter in your MainActivity and instantiate it once in the populateListView,

public class MainActivity extends Activity {

    private List<Assignment> allDeliveries= new ArrayList<Assignment>();
    MyListAdapter adapter;


@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        populateDeliveryList();
        populateListView();
        registerClickCallBack();
        final MySQLiteHelper db = new MySQLiteHelper(this);

        accept.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                RelativeLayout newdeliverylayout= (RelativeLayout) findViewById(R.id.newdeliverylayout);
                allDeliveries.add(incomingAssignment);
                db.addAssignment(incomingAssignment);
                adapter.notifyDataSetChanged();
            }
        });
        deny.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                RelativeLayout newdeliverylayout= (RelativeLayout) findViewById(R.id.newdeliverylayout);
                newdeliverylayout.setVisibility(RelativeLayout.GONE);
            }
        });

    private void populateDeliveryList() {
        MySQLiteHelper db = new MySQLiteHelper(this);
        List<Assignment> list = db.getAllAssignments();
        for (int i = 0; i < list.size();i++)
        {
            allDeliveries.add(list.get(i));
        }
    }

    private void populateListView() {
        adapter = new MyListAdapter();
        ListView list = (ListView) findViewById(R.id.deliveriesListView);
        list.setAdapter(adapter);
    }                                           

}

Upvotes: 3

Related Questions