不完整或不理想的输出

时间:2015-07-12 14:57:45

标签: android

代码是关于制作一个联系人管理器应用程序一切正常但是当添加联系人时,当我们点击列表选项卡时它没有显示在列表中。

代码:

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



}

1 个答案:

答案 0 :(得分:0)

在将您的ArrayList添加到联系POJO后,您必须通过调用notifyDataSetChanged()通知您的适配器您的数据集已更新。

为此,您需要保留适配器的引用

请勿在{{1​​}}回调中致电populateList()后致电addContact(),因为它会完全重置您的列表,这是您不想要的。

以下是您的需求:

onClick()