2016-11-30 3 views
1

Ich habe eine Android-Aktivität als Grundaktivität, die unter Layout -Android Basis Activity & Listview - Progress Bar Nicht sichtbar

Layout

Und unten ist die xml für das Layout

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_read_contacts" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="au.com.savedme.ReadContacts"> 

<ListView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/readContactLv" /> 

<ProgressBar 
    style="?android:attr/progressBarStyle" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/readContactPb" 
    android:layout_alignParentBottom="false" 
    android:layout_alignParentRight="false" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" /> 

<android.support.design.widget.FloatingActionButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:clickable="true" 
    app:fabSize="mini" 
    app:srcCompat="@mipmap/ic_cloud_upload_white_24dp" 
    android:id="@+id/readContactFab" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" /> 

Ich beginne diese Aktivität von einer anderen Aktivität. Mein Ziel ist es, die Fortschrittsanzeige in der onCreate-Methode sichtbar zu machen und dann die Listenansicht zu laden, sobald die Listenansicht mit Elementen gefüllt ist, die ich unsichtbar machen möchte.

Meine Fragen sind

  • wenn ich die Liste anzuzeigen beginnen bevöl der Fortschrittsbalken überhaupt keine Angelegenheit, die nicht sichtbar ist, was ich versuche.
  • Wenn ich die Listenansicht ausfüllend überspringe, wird der Fortschrittsbalken deutlich sichtbar.
  • Wenn ich die Listenansicht bearbeite gibt es eine signifikante Verzögerung in der Navigation von vorherigen Aktivitäten und der Bildschirm friert einfach ein und wird schwarz (und leer) und sobald die Liste ausgefüllt ist, kommt sie zurück, was keinen visuellen Hinweis gibt um das zu tun, was passiert (nicht erwünscht).

Was soll ich tun, um dies zu verhindern, ist unten meine onCreate Methode -

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

    pb = (ProgressBar) findViewById(R.id.readContactPb); 
    pb.setVisibility(View.VISIBLE); 

    // Variable initialisations 
    contactList = new ArrayList<>(); 
    contactListTosave = new ArrayList<>(); 
    mDatabase = FirebaseDatabase.getInstance().getReference(); 
    userId = FirebaseAuth.getInstance().getCurrentUser().getUid(); 
    mContactListView = (ListView) findViewById(R.id.readContactLv); 
    mContactListView.setOnItemClickListener(onClickListener); 
    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.readContactFab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      for (Contact contactToSave:contactListTosave){ 
       mDatabase.child("contacts").child(userId).child(contactToSave.getFirstName()).setValue(contactToSave); 
      } 
      Intent i = new Intent(getApplicationContext(),ContactList.class); 
      startActivity(i); 
     } 
    }); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    if (mAdapter == null) { 
     mAdapter = new ContactArrayAdapter(ReadContacts.this, 0, contactList); 
     mContactListView.setAdapter(mAdapter); 
    } 
    checkPermissionToReadContact(); 
} 

Und unten ist der Code für meine listAdapter -

import android.content.Context; 
import android.os.Build; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.List; 

/** 
* Created by AppsWise on 15/10/16. 
*/ 

public class ContactArrayAdapter extends ArrayAdapter<Contact> { 
    private Context context; 
    private List<Contact> contactsProperties; 
    private String TAG = "ContactArrayAdapter"; 

//constructor, call on creation 
public ContactArrayAdapter(Context context, int resource, ArrayList<Contact> objects) { 
    super(context, resource, objects); 
    this.context = context; 
    this.contactsProperties = objects; 
} 

// Called when rendering the view 
public View getView(int position, View convertView, ViewGroup parent) { 
    // get properties we are displaying 
    Contact contact = contactsProperties.get(position); 

    //Get inflater and inflate the XML layout for each item 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(MainActivity.LAYOUT_INFLATER_SERVICE); 
    View view = inflater.inflate(R.layout.contact_item, null); 
    TextView nameText = (TextView) view.findViewById(R.id.nameText); 
    TextView contactName = (TextView) view.findViewById(R.id.contactName); 
    TextView number = (TextView) view.findViewById(R.id.phoneText); 

    String completeName = ""; 
    if(contact.getFirstName()!=null){ 
     completeName = contact.getFirstName(); 
    } 
    if(contact.getLastName()!=null){ 
     completeName += " "+contact.getLastName(); 
    } 
    if (completeName!=null && completeName.trim().length()>0) { 
     if (nameText!=null) { 
      nameText.setText(completeName.substring(0,1).toUpperCase()); 
     } 
     contactName.setText(completeName); 
     if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && contact.getIsUploaded()){ 
      nameText.setBackgroundColor(context.getColor(R.color.colorAccent)); 
     } 
    } 
    number.setText(contact.getPhone()); 
    return view; 
} 

}

+0

können Ihre XML-Datei anzeigen – Vadivel

+0

Erstellen Sie eine Schnittstelle in Ihrer Adapterklasse und wenn der Adapter funktioniert, verwenden Sie diese Schnittstelle, um den abgeschlossenen Status an activity.then Sie können den Fortschritt in diesem Rückruf – Ak9637

+0

@ Ak9637 Leider habe ich es nicht bekommen, können Sie bitte ein wenig mehr über das Erstellen einer Schnittstelle in der Adapterklasse erklären? –

Antwort

1

Während Sie holen die Daten in die ListView, behalten Sie Ihre ListView VISIBILITY als GONE. Sobald Ihr Listview geladen wird, stellen Sie die ProgressBar VISIBILITY als INVISIBLE

+0

Danke, lass mich das versuchen. –

+0

Bitte upvote meine Antwort, wenn es funktioniert :) –

+0

Tut mir leid, es funktioniert nicht. –

1

den Code unten Versuchen Sie es Das Problem arbeiten wird, ist ein Blick auf eine andere überlappt wird (dh Listenansicht über die Fortschritte)

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

mContactListView = (ListView) findViewById(R.id.readContactLv); 
mContactListView.setOnItemClickListener(onClickListener); 
mContactListView.setVisibility(View.INVISIBLE); 

pb = (ProgressBar) findViewById(R.id.readContactPb); 
pb.setVisibility(View.VISIBLE); 

// Variable initialisations 
contactList = new ArrayList<>(); 
contactListTosave = new ArrayList<>(); 
mDatabase = FirebaseDatabase.getInstance().getReference(); 
userId = FirebaseAuth.getInstance().getCurrentUser().getUid(); 
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.readContactFab); 
fab.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     for (Contact contactToSave:contactListTosave){ 
      mDatabase.child("contacts").child(userId).child(contactToSave.getFirstName()).setValue(contactToSave); 
     } 
     Intent i = new Intent(getApplicationContext(),ContactList.class); 
     startActivity(i); 
    } 
}); 
getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

if (mAdapter == null) { 
    mAdapter = new ContactArrayAdapter(ReadContacts.this, 0, contactList); 
    mContactListView.setAdapter(mAdapter); 

    //Disabling progress here 
    mContactListView.setVisibility(View.VISIBLE); 
    pb.setVisibility(View.INVISIBLE); 
} 
checkPermissionToReadContact(); 
} 
+0

als korrekte Antwort markieren, wenn es für Sie funktioniert :) –

+0

Nein, es funktioniert nicht, es ist immer noch gleich. –

+0

wird Ihre Liste angezeigt? –