2016-05-26 8 views
2

Ich habe eine Aktivität, in der ich die Kontakte vom Telefon in einer Listenansicht zeige. Jetzt habe ich die Funktion hinzugefügt, den neuen Kontakt hinzuzufügen, indem ich die Kontaktabsicht aufruft, um einen neuen Kontakt hinzuzufügen. Das ist gut gemacht.Wie wird die Listenansicht nach dem Hinzufügen des Kontakts aus der Kontaktabsicht aktualisiert?

Aber wenn ich nach dem Hinzufügen des Kontakts zur Aktivität zurückkehren, kann ich den zuletzt hinzugefügten Kontakt nicht sehen.

Ich habe versucht, die Listenansicht zu aktualisieren, indem ich invalidate() auch auf Adapter, den ich versuchte, durch Aufruf der invalidate() onResume -Methode.

Aber ich kann das Ergebnis nicht erhalten. Ich habe auch versucht, die add-Absicht mit startActivityForResult aufzurufen und die Kontakte in onActivityResult() zu erhalten, aber das ist auch fehlgeschlagen.

Ich weiß nicht, was schief läuft. Bitte helfen Sie.

Aktivität:

public class ContactList extends AppCompatActivity { 


    private ArrayList<contact> contact_list = null; 
    private contactAdapter mContactAdapter = null; 

    private ArrayList<contact> items; 
    private ArrayList<contact> selectedContacts; 
    boolean[] isChecked; 
    Cursor mCursor; 
    ListView lv; 
    public int RQS_PICK_CONTACT = 1,RQS_ADD_CONTACT = 2; 
    private static final int PERMISSIONS_REQUEST_READ_CONTACTS = 100; 
    ArrayList<Integer> selectedItemsPositions; 
    private ImageView done,back; 
    private boolean mContactListActivity; 
    private FloatingActionButton fab; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_contacts_list); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 

     toolbar.setTitle(""); 
     TextView toolbarTitle = (TextView) toolbar.findViewById(R.id.toolbar_title); 

     toolbarTitle.setText("Select Contacts"); 

     setSupportActionBar(toolbar); 

     done = (ImageView)findViewById(R.id.done); 

     back = (ImageView)findViewById(R.id.back); 

     fab = (FloatingActionButton)findViewById(R.id.fab); 

     contact_list = new ArrayList<contact>(); 

     selectedContacts = new ArrayList<contact>(); 

    // selectedItemsPositions = new ArrayList<>(); 

     lv = (ListView)findViewById(R.id.list); 

     showContacts(); 

     //getContacts(); 


     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 


       Intent intent = new Intent(Intent.ACTION_INSERT, 
         ContactsContract.Contacts.CONTENT_URI); 
       startActivityForResult(intent,RQS_ADD_CONTACT); 


      } 
     }); 


    } 

    @SuppressWarnings("unused") 
    private void getContacts() { 


     String[] projection = new String[] { 
       ContactsContract.Contacts.DISPLAY_NAME, 
       ContactsContract.Contacts.HAS_PHONE_NUMBER, 
       ContactsContract.Contacts._ID }; 


     mCursor = managedQuery(ContactsContract.Contacts.CONTENT_URI, null, null, null, "upper("+ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + ") ASC"); 

     while (mCursor.moveToNext()) { 
      contact contact = new contact(); 

      String contactId = mCursor.getString(mCursor.getColumnIndex(ContactsContract.Contacts._ID)); 

      contact.setContactid(mCursor.getString(mCursor.getColumnIndex(ContactsContract.Contacts._ID))); 
      contact.setContactName(mCursor.getString(mCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))); 
      contact_list.add(contact); 
     } 
     isChecked = new boolean[mCursor.getCount()]; 

     for (int i = 0; i < isChecked.length; i++) { 
      isChecked[i] = false; 
     } 


     this.mContactAdapter = new contactAdapter(this, R.layout.contact_list_item, contact_list); 
     lv.setAdapter(this.mContactAdapter); 
     mContactAdapter.notifyDataSetChanged(); 
    // mCursor.close(); 

    } 


    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 

     if (requestCode == RQS_PICK_CONTACT) { 
      if (resultCode == RESULT_OK) { 

       getContacts(); 

      } 
     } 

    } 


    @Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, 
              int[] grantResults) { 
     if (requestCode == PERMISSIONS_REQUEST_READ_CONTACTS) { 
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       // Permission is granted 
       getContacts(); 
      } else { 
       Toast.makeText(this, "Until you grant the permission, we canot display the names", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 


    private void showContacts() 
    { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { 

      requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, PERMISSIONS_REQUEST_READ_CONTACTS); 
      //After this point you wait for callback in onRequestPermissionsResult(int, String[], int[]) overriden method 
     } 

     else { 

      getContacts(); 

     } 

    } 

    @Override 
    public void onResume() 
    { 

     super.onResume(); 

     mContactAdapter.notifyDataSetInvalidated(); 

     //Intent intent = getIntent(); 
     //intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
     //finish(); 
     //startActivity(intent); 

    } 

} 

Antwort

0

try this:

inside yourr onResume() add this 
    if (listvew!= null) { 
    listvew.invalidateViews(); 
} 
adapter.notifyDataSetChanged(); 
+0

dies versucht. Dosis nicht helfen. @ muruga5000 –

+0

versuche diese listview.invalidateViews(); @ user6265109 – YUVRAJ

+0

Dosis nicht helfen. :-(@ muruga5000 –

0

Fügen Sie diese innerhalb onResume()

if(adapter!= null){ 
    listvew.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 
}