2015-07-12 3 views
0

Код о создании приложения-менеджера контактов. Все работает, но когда контакт добавлен, он не отображается в списке при нажатии на вкладку списка.Неполный или не желаемый результат

Код:

package com.example.tanmay.myapplication2; 

public class MainActivity extends ActionBarActivity { 

EditText nameTxt,phoneTxt,emailTxt,addressTxt; 
List<Contact> Contacts=new ArrayList<Contact>(); 
ListView contactListView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    nameTxt=(EditText) findViewById(R.id.txtName); 
    phoneTxt=(EditText) findViewById(R.id.txtPhone); 
    emailTxt=(EditText) findViewById(R.id.txtEmail); 
    addressTxt=(EditText) findViewById(R.id.txtAddress); 
    contactListView = (ListView) findViewById(R.id.listView); 
    TabHost tabHost=(TabHost) findViewById(R.id.tabHost); 

    tabHost.setup(); 

    TabHost.TabSpec tabSpec = tabHost.newTabSpec("creator"); 
    tabSpec.setContent(R.id.tabCreator); 
    tabSpec.setIndicator("creator"); 
    tabHost.addTab(tabSpec); 

    tabSpec = tabHost.newTabSpec("list"); 
    tabSpec.setContent(R.id.tabContactList); 
    tabSpec.setIndicator("List"); 
    tabHost.addTab(tabSpec); 


    final Button addBtn=(Button) findViewById(R.id.btnAdd); 
    addBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      addContact(nameTxt.getText().toString(),phoneTxt.getText().toString(),emailTxt.getText().toString(),addressTxt.getText().toString()); 
      populateList(); 
      Toast.makeText(getApplicationContext(),nameTxt.getText().toString() +"has been added to your contacts!",Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    nameTxt.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      addBtn.setEnabled(!nameTxt.getText().toString().trim().isEmpty()); 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 
} 

private void populateList(){ 
    ArrayAdapter<Contact> adapter = new ContactListAdapter(); 
    contactListView.setAdapter(adapter); 
} 

private void addContact(String name,String phone,String email,String address){ 
    Contacts.add(new Contact(name,phone,email,address)); 

} 

private class ContactListAdapter extends com.example.tanmay.myapplication2.ContactListAdapter { 
    public ContactListAdapter(){ 
     super(MainActivity.this,R.layout.listview_item, Contacts); 
    } 

    @Override 
    public View getView(int position,View view,ViewGroup parent){ 
     if(view==null) 
      view = getLayoutInflater().inflate(R.layout.listview_item,parent,false); 

     Contact currentContact = Contacts.get(position); 

     TextView name=(TextView) view.findViewById(R.id.contactName); 
     name.setText(currentContact.getName()); 
     TextView phone=(TextView) view.findViewById(R.id.phoneNumber); 
     phone.setText(currentContact.getPhone()); 
     TextView email=(TextView) view.findViewById(R.id.emailAddress); 
     email.setText(currentContact.getEmail()); 
     TextView address=(TextView) view.findViewById(R.id.cAddress); 
     address.setText(currentContact.getAddress()); 

     return view; 
    } 



    @Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 
} 



} 

ответ

0

Вы должны уведомить адаптер, что ваш набор данных был обновлен с помощью вызова notifyDataSetChanged() после добавления вашего контакта POJO ваш ваш ArrayList.

Для этого вам нужно будет сохранить ссылку на адаптере

Не вызывать populateList() после вызова addContact() в вашем onClick() обратного вызова, поскольку это приведет к сбросу полностью список, который является то, что вы не хотите.

Вот что вам нужно:

private ContactListAdapter mAdapter; 

private void populateList() { 
    mAdapter = new ContactListAdapter(); 
    contactListView.setAdapter(mAdapter); 
} 

private void addContact(String name,String phone,String email,String address) { 
    Contacts.add(new Contact(name,phone,email,address)); 
    mAdapter.notifyDataSetChanged(); 

} 

final Button addBtn=(Button) findViewById(R.id.btnAdd); 
addBtn.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     addContact(nameTxt.getText().toString(),phoneTxt.getText().toString(),emailTxt.getText().toString(),addressTxt.getText().toString()); 
     Toast.makeText(getApplicationContext(),nameTxt.getText().toString() +"has been added to your contacts!",Toast.LENGTH_SHORT).show(); 
    } 
}); 
+0

как я уведомит мой адаптер, что мой набор данных был обновлен по телефону notifyDataSetChanged() (назвав его где) и как я добавить Связаться с ArrayList – Andy

+0

его показывая ошибку что частный не может использоваться в качестве частного ContactListAdapter mAdapter и его показ незаконной ошибки выражения запуска – Andy

+0

забыть приведенные выше комментарии – Andy

Смежные вопросы