0

I am trying to add custom objects to a list, which is a field inside another custom object.

let me explain reasoning. I have an arraylist of clients(company's) these clients have contacts(contact persons who work at the client). for this reason I am trying to add these contacts to a arraylistfield inside the client object. but I don't know how to add these to the arraylist of the selected client or how to call on a method inside the clientsobjectclass with initialization, since the constructor asks all the client fields.

Client Object:

package Activities.Main.Objects;

import android.util.Log;
import Main.Arrays.ClientsArray;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Oscar on 19-02-16.
 */
public class Clients {
    private String Name;
    private String Phone;
    private String Email;
    private String URL;
    private Double Turnover;
    private String VisitAddress;
    private String VisitCity;
    private String VisitZipcode;
    private String VisitCountry;
    private String PostalAddress;
    private String PostalCity;
    private String PostalZipcode;
    private String PostalCountry;
    private List<Contacts> Contactlist =  new ArrayList<Contacts>();


    public Clients(String Name, String Phone, String Email, String URL, Double Turnover,
                   String VisitAddress, String VisitCity, String VisitZipcode, String VisitCountry,
                   String PostalAddress, String PostalCity, String PostalZipcode, String PostalCountry){
            super();
            this.Name = Name;
            this.Phone = Phone;
            this.Email = Email;
            this.URL = URL;
            this.Turnover = Turnover;
            this.VisitAddress = VisitAddress;
            this.VisitCity = VisitCity;
            this.VisitZipcode = VisitZipcode;
            this.VisitCountry = VisitCountry;
            this.PostalAddress = PostalAddress;
            this.PostalCity = PostalCity;
            this.PostalZipcode = PostalZipcode;
            this.PostalCountry = PostalCountry;
    }


    public void add(){
        Contactlist.add(new Contacts("Oscar", "Hugo", "Bokhorst", "Developer", "0616397853", "0513631325", "[email protected]"));
        int sizeCheck = Contactlist.size();
        Log.d("Hello", "=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f=f = contactlist size = " + sizeCheck);

    }


    public String getName() {
        return Name;
    }

    public String getPhone() {
        return Phone;
    }

    public String getEmail() {
        return Email;
    }

    public String getURL() {
        return URL;
    }

    public Double getTurnover() {

        return Turnover;
    }

    public String getVisitAddress() {
        return VisitAddress;
    }

    public String getVisitCity() {
        return VisitCity;
    }

    public String getVisitZipcode() {
        return VisitZipcode;
    }

    public String getVisitCountry() {
        return VisitCountry;
    }

    public String getPostalAddress() {
        return PostalAddress;
    }

    public String getPostalCity() {
        return PostalCity;
    }

    public String getPostalZipcode() {
        return PostalZipcode;
    }

    public String getPostalCountry() {
        return PostalCountry;
    }

    public List<Contacts> getContactlist(){
        return Contactlist;
    }
}

Where I want to add the contacts to the client(atm still going to a separate array, but they need to be linked to the client)

package Main.Fragments;

import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.hunteronlinebeta.app.R;
import Main.Arrays.ClientsArray;
import Main.Arrays.ContactsArray;
import Main.Objects.Clients;
import Main.Objects.Contacts;

public class AddContactsFragment extends Fragment implements OnClickListener {

    ContactsArray conray = new ContactsArray();
    ClientsArray cray = new ClientsArray();
    private int clientLocation;
    FragmentManager manager;
    FragmentTransaction transaction;
    Button submitContactsBtn;
    Button clearContactsFieldsBtn;

    public AddContactsFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        manager = getFragmentManager();
        transaction = manager.beginTransaction();

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_add_contacts,
                container, false);

        submitContactsBtn = (Button) rootView.findViewById(R.id.btn_submit_contact);
        submitContactsBtn.setOnClickListener(this);

        clearContactsFieldsBtn = (Button) rootView.findViewById(R.id.clearContactsFieldsBtn);
        clearContactsFieldsBtn.setOnClickListener(this);

        return rootView;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.clearContactsFieldsBtn:
                AddContactsFragment acf = new AddContactsFragment();
                transaction.addToBackStack(null);
                transaction.replace(R.id.group, acf, "addconfrag");
                transaction.commit();
                break;

            case R.id.btn_submit_contact:

                Clients currentClient = cray.ClientsArray.get(clientLocation);

                EditText editFirstName = (EditText) getActivity().findViewById(R.id.view_contact_firstname);
                final String etFirstName = editFirstName.getText().toString();

                EditText editMiddleName = (EditText) getActivity().findViewById(R.id.view_contact_middleName);
                final String etMiddleName = editMiddleName.getText().toString();

                EditText editSurname = (EditText) getActivity().findViewById(R.id.view_contact_surname);
                final String etSurname = editSurname.getText().toString();


                EditText editPhone = (EditText) getActivity().findViewById(R.id.view_contact_phone);
                final String etPhone = editPhone.getText().toString();

                EditText editMobile = (EditText) getActivity().findViewById(R.id.view_contact_mobile);
                final String etMobile = editMobile.getText().toString();

                EditText editEmail = (EditText) getActivity().findViewById(R.id.view_contact_email);
                final String etEmail = editEmail.getText().toString();


                EditText editPosition = (EditText) getActivity().findViewById(R.id.view_contact_position);
                final String etPosition = editPosition.getText().toString();


                if (etFirstName.trim().equals("") |
                        etMiddleName.trim().equals("") |
                        etSurname.trim().equals("") |
                        etMobile.trim().equals("") |
                        etPhone.trim().equals("") |
                        etEmail.trim().equals("") |
                        etPosition.trim().equals("")) {

                    Toast.makeText(this.getActivity(), "Plz fill in the fields", Toast.LENGTH_LONG).show();

                } else {
                    Contacts contact = new Contacts(etFirstName, etMiddleName, etSurname, etPosition, etPhone, etMobile, etEmail);


                    conray.ContactsArray.add(contact);


                    ViewClientsFragment vcf = new ViewClientsFragment();
                    transaction.replace(R.id.group, vcf, "viewcfrag");
                    transaction.commit();
                }
                break;
        }
    }

    public void setLocation(int location) {
        this.clientLocation = location;

        return;
    }
}

place where I am viewing my client with contact list, where I set client location and give it to AddContactsFragment.

package Main.Fragments;

import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.app.ListFragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.*;
import android.view.View.OnClickListener;
import android.view.View.MeasureSpec;
import app.R;
import Main.Adapters.ContactsAdapter;
import Main.Arrays.ClientsArray;
import Main.Arrays.ContactsArray;
import Main.Objects.Clients;

public class ViewClientsFragment extends ListFragment implements OnClickListener {

    ClientsArray cray = new ClientsArray();
    ContactsArray conray = new ContactsArray();
    AddContactsFragment adconfrag = new AddContactsFragment();
    FragmentTransaction transaction;
    FragmentManager manager;
    private int clientlocation;
    private int contactlocation;
    Button editClientsButton;
    Button addContactsButton;



    public ViewClientsFragment(){
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        manager = getFragmentManager();
        View rootView = inflater.inflate(R.layout.fragment_view_clients,
                container, false);

        transaction = manager.beginTransaction();

        editClientsButton = (Button) rootView.findViewById(R.id.btn_edit_client);
        editClientsButton.setOnClickListener(this);

        addContactsButton = (Button) rootView.findViewById(R.id.btn_add_contact);
        addContactsButton.setOnClickListener(this);


        ListView clientList = (ListView) rootView.findViewById(android.R.id.list);

        //--------------------------------------------------------------------------------------------------------------
        int x = conray.ContactsArray.size();
        String checkSize = String.valueOf(x);
        Log.d("hello", "-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x- has the list bin populated:" + checkSize);
        //--------------------------------------------------------------------------------------------------------------

        setListViewHeightBasedOnChildren(clientList);

        Clients currentClient = cray.ClientsArray.get(clientlocation);

        Log.d("hello", "0000000000000000000000000000000000000000000000 clientlocation = " + clientlocation);

        TextView viewName = (TextView) rootView.findViewById(R.id.view_company_name);
        viewName.setText(currentClient.getName());

        TextView viewPhone = (TextView)rootView.findViewById(R.id.view_phone);
        viewPhone.setText(currentClient.getPhone());

        TextView viewEmail = (TextView)rootView.findViewById(R.id.view_Email);
        viewEmail.setText(currentClient.getEmail());

        TextView viewURL = (TextView)rootView.findViewById(R.id.view_url);
        viewURL.setText(currentClient.getURL());

        TextView viewTurnover = (TextView)rootView.findViewById(R.id.view_turnover);
        viewTurnover.setText(String.valueOf(currentClient.getTurnover()));



        TextView viewVisitAddress = (TextView)rootView.findViewById(R.id.view_visit_address);
        viewVisitAddress.setText(currentClient.getVisitAddress());

        TextView viewVisitCity = (TextView)rootView.findViewById(R.id.view_visit_city);
        viewVisitCity.setText(currentClient.getVisitCity());

        TextView viewVisitZipcode = (TextView)rootView.findViewById(R.id.view_visit_zipcode);
        viewVisitZipcode.setText(currentClient.getVisitZipcode());

        TextView viewVisitCountry = (TextView)rootView.findViewById(R.id.view_visit_country);
        viewVisitCountry.setText(currentClient.getVisitCountry());

        TextView viewPostalAddress = (TextView)rootView.findViewById(R.id.view_postal_address);
        viewPostalAddress.setText(currentClient.getPostalAddress());

        TextView viewPostalCity = (TextView)rootView.findViewById(R.id.view_postal_city);
        viewPostalCity.setText(currentClient.getPostalCity());

        TextView viewPostalZipcode = (TextView)rootView.findViewById(R.id.view_postal_zipcode);
        viewPostalZipcode.setText(currentClient.getPostalZipcode());

        TextView viewPostalCountry = (TextView)rootView.findViewById(R.id.view_postal_country);
        viewPostalCountry.setText(currentClient.getPostalCountry());

        return rootView;
    }

    public void setLocation(int location) {
        this.clientlocation = location;
    }

    public void setListViewHeightBasedOnChildren(ListView listView) {
        ArrayAdapter adapter = new ContactsAdapter(this.getActivity(), conray.ContactsArray);
        if (adapter == null)
            return;

        int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.UNSPECIFIED);
        int totalHeight = 0;
        View view = null;
        for (int i = 0; i < adapter.getCount(); i++) {
            view = adapter.getView(i, view, listView);
            if (i == 0)
                view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, ViewGroup.LayoutParams.WRAP_CONTENT));

            view.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
            totalHeight += view.getMeasuredHeight();
        }
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (conray.ContactsArray.size() - 1));
        listView.setLayoutParams(params);
        listView.setAdapter(adapter);
    }
    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        ViewContactsFragment vconf = new ViewContactsFragment();
        transaction.addToBackStack(null);
        transaction.replace(R.id.group, vconf, "vconfrag");
        contactlocation = position;
        vconf.setLocation(contactlocation);
        transaction.commit();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_edit_client:
                Toast.makeText(this.getActivity(), "Pressed the edit Client button", Toast.LENGTH_LONG).show();
                break;
            case R.id.btn_add_contact:
                AddContactsFragment acf = new AddContactsFragment();
                transaction.addToBackStack(null);
                transaction.replace(R.id.group, acf, "aconfrag");
                acf.setLocation(clientlocation);
                transaction.commit();
                break;
        }
    }
}

1 Answer 1

1

Use the constructor to assign the ArrayList<Contacts> also. In you Fragment or Activity create a new list -

List<Contacts> Contactlist =  new ArrayList<Contacts>();

Then add all the Contacts to this list for this particular client.

Then simply pass it to the constructor when you're creating a Client class object with the rest of the details -

Client c = new Client(name, phone, ......... , Contactlist);

In your Client class modify the constructor to accept the list also -

public Clients(String name, String phone, .......... , List Contactlist){
    this.Contactlist = Contactlist; //List assigned
}

If you want to add more contacts to this list then simply access the list though the getter method and add more contacts -

client.getContactList().add(contact);
Sign up to request clarification or add additional context in comments.

1 Comment

thx, got it working now. sometimes the awnser is much more simple then what you are trying to do >.<

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.