【发布时间】:2016-03-18 12:45:55
【问题描述】:
好吧,我有一个包含客户端对象的数组列表,我现在要做的是在其中一个客户端字段上搜索数组列表,并获取所有共享此值的客户端。之后在列表中显示这些客户端。
客户:
public class Client implements Serializable{
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<Contact> contactList = new ArrayList<Contact>();
public Client(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, List contactList){
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;
this.contactList = contactList;
}
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<Contact> getContactlist(){
return contactList;
}
public void setName(String name) {
this.name = name;
}
public void setPhone(String phone) {
this.phone = phone;
}
public void setEmail(String email) {
this.email = email;
}
public void setUrl(String url) {
this.url = url;
}
public void setTurnover(Double turnover) {
this.turnover = turnover;
}
public void setVisitAddress(String visitAddress) {
this.visitAddress = visitAddress;
}
public void setVisitCity(String visitCity) {
this.visitCity = visitCity;
}
public void setVisitZipcode(String visitZipcode) {
this.visitZipcode = visitZipcode;
}
public void setVisitCountry(String visitCountry) {
this.visitCountry = visitCountry;
}
public void setPostalAddress(String postalAddress) {
this.postalAddress = postalAddress;
}
public void setPostalCity(String postalCity) {
this.postalCity = postalCity;
}
public void setPostalZipcode(String postalZipcode) {
this.postalZipcode = postalZipcode;
}
public void setPostalCountry(String postalCountry) {
this.postalCountry = postalCountry;
}
public void setContactList(List<Contact> contactList) {
this.contactList = contactList;
}
}
现在我这样搜索:
public class SearchClientFragment extends Fragment implements OnClickListener {
private ClientsArray clientsArray = new ClientsArray();
private Client currentClient;
private EditText searchName;
private EditText searchVisitAddress;
private EditText searchVisitCity;
private EditText searchVisitZipcode;
private EditText searchVisitCountry;
private EditText searchPostalAddress;
private EditText searchPostalCity;
private EditText searchPostalZipcode;
private EditText searchPostalCountry;
private EditText searchContactFirstname;
private EditText searchContactSurname;
public SearchClientFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View rootView = inflater.inflate(R.layout.fragment_search_client,
container, false);
Button searchClientButton = (Button) rootView.findViewById(R.id.btn_submit_search_client);
searchClientButton.setOnClickListener(this);
Button clearSearchFields = (Button) rootView.findViewById(R.id.btn_clear_search_client);
clearSearchFields.setOnClickListener(this);
searchName = (EditText) rootView.findViewById(R.id.search_company_name);
searchVisitAddress = (EditText) rootView.findViewById(R.id.search_visit_address);
searchVisitCity = (EditText) rootView.findViewById(R.id.search_visit_city);
searchVisitZipcode = (EditText) rootView.findViewById(R.id.search_visit_zipcode);
searchVisitCountry = (EditText) rootView.findViewById(R.id.search_visit_country);
searchPostalAddress = (EditText) rootView.findViewById(R.id.search_postal_address);
searchPostalCity = (EditText) rootView.findViewById(R.id.search_postal_city);
searchPostalZipcode = (EditText) rootView.findViewById(R.id.search_postal_zipcode);
searchPostalCountry = (EditText) rootView.findViewById(R.id.search_postal_country);
searchContactFirstname = (EditText) rootView.findViewById(R.id.search_contact_fname);
searchContactSurname = (EditText) rootView.findViewById(R.id.search_contact_sname);
return rootView;
}
@Override
public void onClick(View v) {
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
switch (v.getId()){
case R.id.btn_clear_search_client:
searchName.setText("");
searchVisitAddress.setText("");
searchVisitCity.setText("");
searchVisitZipcode.setText("");
searchVisitCountry.setText("");
searchPostalAddress.setText("");
searchPostalCity.setText("");
searchPostalZipcode.setText("");
searchPostalCountry.setText("");
searchContactFirstname.setText("");
searchContactSurname.setText("");
break;
case R.id.btn_submit_search_client:
for(Client client : clientsArray.ClientsArray){
client.getContactlist();
if(client.getName().trim().equals(searchName.getText().toString().trim())) {
currentClient = client;
}else if (client.getVisitAddress().trim().equals(searchVisitAddress.getText().toString().trim())){
currentClient = client;
}else if (client.getVisitCity().trim().equals(searchVisitCity.getText().toString().trim())){
currentClient = client;
}else if (client.getVisitZipcode().trim().equals(searchVisitZipcode.getText().toString().trim())){
currentClient = client;
}else if (client.getVisitCountry().trim().equals(searchVisitCountry.getText().toString().trim())){
currentClient = client;
} else if (client.getPostalAddress().trim().equals(searchPostalAddress.getText().toString().trim())){
currentClient = client;
}else if (client.getPostalCity().trim().equals(searchPostalCity.getText().toString().trim())){
currentClient = client;
}else if (client.getPostalZipcode().trim().equals(searchPostalZipcode.getText().toString().trim())){
currentClient = client;
}else if (client.getPostalCountry().trim().equals(searchPostalCountry.getText().toString().trim())){
currentClient = client;
}for(Contact contact : client.getContactlist()){
if(contact.getFirstname().trim().equals(searchContactFirstname.getText().toString().trim())){
currentClient = client;
}else if(contact.getSurname().trim().equals(searchContactSurname.getText().toString().trim())){
currentClient = client;
}
}
if(currentClient != null){
ViewClientFragment viewClientFragment = new ViewClientFragment();
viewClientFragment.setCurrentClient(currentClient);
transaction.replace(R.id.group, viewClientFragment, "viewcfrag");
transaction.addToBackStack(null);
transaction.commit();
}else{
Toast.makeText(this.getActivity(), "Client Not Found", Toast.LENGTH_LONG).show();
}
}
break;
}
}
}
当只有 1 个客户端具有该字段值时,这非常有用,并将我带到该客户端的视图片段。但是如果我在同一字段中填写多个具有的值,我现在想获得所有客户。例如,当我在 visitaddress Groningen 搜索时,我想获取所有以 groningen 作为访问地址的客户。
我是否必须将这些添加到另一个数组才能在列表视图中显示这些? 或者我可以用其他方式吗
我的解决方案:编辑搜索片段
public class SearchClientFragment extends Fragment implements OnClickListener {
private Client currentClient;
private EditText searchName;
private EditText searchVisitAddress;
private EditText searchVisitCity;
private EditText searchVisitZipcode;
private EditText searchVisitCountry;
private EditText searchPostalAddress;
private EditText searchPostalCity;
private EditText searchPostalZipcode;
private EditText searchPostalCountry;
private EditText searchContactFirstname;
private EditText searchContactSurname;
public SearchClientFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View rootView = inflater.inflate(R.layout.fragment_search_client,
container, false);
Button searchClientButton = (Button) rootView.findViewById(R.id.btn_submit_search_client);
searchClientButton.setOnClickListener(this);
Button clearSearchFields = (Button) rootView.findViewById(R.id.btn_clear_search_client);
clearSearchFields.setOnClickListener(this);
searchName = (EditText) rootView.findViewById(R.id.search_company_name);
searchVisitAddress = (EditText) rootView.findViewById(R.id.search_visit_address);
searchVisitCity = (EditText) rootView.findViewById(R.id.search_visit_city);
searchVisitZipcode = (EditText) rootView.findViewById(R.id.search_visit_zipcode);
searchVisitCountry = (EditText) rootView.findViewById(R.id.search_visit_country);
searchPostalAddress = (EditText) rootView.findViewById(R.id.search_postal_address);
searchPostalCity = (EditText) rootView.findViewById(R.id.search_postal_city);
searchPostalZipcode = (EditText) rootView.findViewById(R.id.search_postal_zipcode);
searchPostalCountry = (EditText) rootView.findViewById(R.id.search_postal_country);
searchContactFirstname = (EditText) rootView.findViewById(R.id.search_contact_fname);
searchContactSurname = (EditText) rootView.findViewById(R.id.search_contact_sname);
ClientsSearchArray.ClientsSearchArray.clear();
return rootView;
}
@Override
public void onClick(View v) {
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
switch (v.getId()){
case R.id.btn_clear_search_client:
searchName.setText("");
searchVisitAddress.setText("");
searchVisitCity.setText("");
searchVisitZipcode.setText("");
searchVisitCountry.setText("");
searchPostalAddress.setText("");
searchPostalCity.setText("");
searchPostalZipcode.setText("");
searchPostalCountry.setText("");
searchContactFirstname.setText("");
searchContactSurname.setText("");
break;
case R.id.btn_submit_search_client:
for(Client client : ClientsArray.ClientsArray){
client.getContactlist();
if(client.getName().trim().equals(searchName.getText().toString().trim())) {
currentClient = client;
ClientsSearchArray.ClientsSearchArray.add(currentClient);
}else if (client.getVisitAddress().trim().equals(searchVisitAddress.getText().toString().trim())){
currentClient = client;
ClientsSearchArray.ClientsSearchArray.add(currentClient);
}else if (client.getVisitCity().trim().equals(searchVisitCity.getText().toString().trim())){
currentClient = client;
ClientsSearchArray.ClientsSearchArray.add(currentClient);
}else if (client.getVisitZipcode().trim().equals(searchVisitZipcode.getText().toString().trim())){
currentClient = client;
ClientsSearchArray.ClientsSearchArray.add(currentClient);
}else if (client.getVisitCountry().trim().equals(searchVisitCountry.getText().toString().trim())){
currentClient = client;
ClientsSearchArray.ClientsSearchArray.add(currentClient);
} else if (client.getPostalAddress().trim().equals(searchPostalAddress.getText().toString().trim())){
currentClient = client;
ClientsSearchArray.ClientsSearchArray.add(currentClient);
}else if (client.getPostalCity().trim().equals(searchPostalCity.getText().toString().trim())){
currentClient = client;
ClientsSearchArray.ClientsSearchArray.add(currentClient);
}else if (client.getPostalZipcode().trim().equals(searchPostalZipcode.getText().toString().trim())){
currentClient = client;
ClientsSearchArray.ClientsSearchArray.add(currentClient);
}else if (client.getPostalCountry().trim().equals(searchPostalCountry.getText().toString().trim())){
currentClient = client;
ClientsSearchArray.ClientsSearchArray.add(currentClient);
}for(Contact contact : client.getContactlist()){
if(contact.getFirstname().trim().equals(searchContactFirstname.getText().toString().trim())){
currentClient = client;
ClientsSearchArray.ClientsSearchArray.add(currentClient);
}else if(contact.getSurname().trim().equals(searchContactSurname.getText().toString().trim())){
currentClient = client;
ClientsSearchArray.ClientsSearchArray.add(currentClient);
}
}
}
break;
}
if(ClientsSearchArray.ClientsSearchArray.size() > 1){
SearchedClientsListFragment searchedClientsListFragment = new SearchedClientsListFragment();
transaction.replace(R.id.group, searchedClientsListFragment, "searchedcfrag");
transaction.addToBackStack(null);
transaction.commit();
}else if (currentClient != null){
ViewClientFragment viewClientFragment = new ViewClientFragment();
viewClientFragment.setCurrentClient(currentClient);
transaction.replace(R.id.group, viewClientFragment, "viewcfrag");
transaction.addToBackStack(null);
transaction.commit();
}else{
Toast.makeText(this.getActivity(), "Client Not Found", Toast.LENGTH_LONG).show();
}
}
}
【问题讨论】:
-
您是否已经实现了列表视图?你问如何实现列表视图?还是只想知道如何更新列表视图?
-
已经有多个列表视图,只是想清楚我认为,已经修复它,问题是找到我想要显示的客户并将它们保存在列表中,实际上有点容易,我是只是想复杂。编辑是我的解决方法
标签: java android object arraylist