2016-03-10 117 views
0

我想自定义对象到列表,这是另一个自定义对象内的字段。添加自定义对象到自定义对象内的列表字段

让我解释一下再验。我有一个客户(公司)的数组列表,这些客户有联系人(在客户端工作的联系人)。为此,我试图将这些联系人添加到客户端对象内的arraylistfield。但我不知道如何将这些添加到选定客户端的数组列表中,或者如何在初始化时调用clientsobject类中的方法,因为构造函数会询问所有客户端字段。

客户端对象:

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; 
    } 
} 

我想要的联系人添加到客户端(ATM还是要一个单独的阵列,但他们需要被连接到客户端)

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; 
    } 
} 

我正在查看我的客户与联系人列表,我设置客户端位置并将其提交给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

也可以使用构造函数来指定ArrayList<Contacts>。在你的片段或活动创建一个新的列表 -

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

然后将所有联系人添加到此特定客户端的列表中。

然后简单地将它传递给构造函数当你创建与细节的休息Client类对象 -

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

在客户端类修改构造函数接受列表还 -

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

如果你想更多的联系人添加到这个列表,然后只需访问列表虽然getter方法和添加更多联系人 -

client.getContactList().add(contact); 
+0

thx,现在就开始工作。有时候,你的努力要比你想要做的更简单>。< –