2016-04-28 21 views
-2

ich erfolgreich hat setzten Elemente in ListViewBaseAdapter verwenden, und was ich will, ist fragen ... ist es möglich, zu prüfen, ob ListView in onCreate() leer ist, oder die gesamte Liste Zahl in onCreate() bekommen? Vielen Dank.Checkliste Artikel in Listview Android

import android.content.Context; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

import java.util.ArrayList; 


public class CustomAdapter extends BaseAdapter { 
    Context context; 
    ArrayList<Contact> list; 
    private static LayoutInflater inflater; 

    public CustomAdapter(Context context,ArrayList<Contact> list){ 
     this.context = context; 
     this.list = list; 
    } 
    @Override 
    public int getCount() { 
     return list.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return list.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if(inflater == null) 
      inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if(convertView == null) 
      convertView = inflater.inflate(R.layout.list_contact,null); 
     TextView id = (TextView) convertView.findViewById(R.id.id_keranjang); 
     TextView name = (TextView) convertView.findViewById(R.id.name); 
     TextView address = (TextView) convertView.findViewById(R.id.contact); 

     int contact_id = list.get(position).getId(); 
     String contact_name = list.get(position).getName(); 
     String contact_address = list.get(position).getAddress(); 

     id.setText(String.valueOf(contact_id)); 
     kode.setText(contact_name); 
     judul.setText(contact_address); 

     return convertView; 
    } 
} 

MainActivity

public class MainActivity extends AppCompatActivity { 
     private static final String URL = "http://domain/contact.php"; 
     CustomAdapter customAdapter; 
     int success = 0; 
     JSONParser jsonParser = new JSONParser(); 
     ArrayList<Contact> listContact = new ArrayList<Contact>(); 
     JSONObject json=null; 
     JSONArray contact=null;ListView li; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      li = (ListView) findViewById(R.id.listView); 

      new getContactAsync().execute(); 

      //int c = li.getAdapter().getCount(); not working 

     } 
    class getContactAsync extends AsyncTask<String,String,ArrayList<Contact>>{ 


      @Override 
      protected ArrayList doInBackground(String... params) { 
        json = jsonParser.getFromURL(URL); 
       try { 
        contact = json.getJSONArray("contact"); 
        success = json.getInt(TAG_SUCCESS); 
        if (success == 1) { 
         for (int i = 0; i < contact.length(); i++) { 
          JSONObject c = contact.getJSONObject(i); 
          Contact a = new Contact(); 
          a.setId(c.optInt(TAG_ID)); 
          a.setName(c.optString(TAG_NAME)); 
          a.setAddress(c.optString(TAG_ADDRESS)); 
          listContact.add(a); 
         } 
        } 
       } catch (JSONException e) { 
        Log.d("ERROR", e.toString()); 
       } 
       return listContact; 
      } 

      @Override 
      protected void onPostExecute(ArrayList<Contact> s) { 
       super.onPostExecute(s); 
       customAdapter = new CustomAdapter(MainActivity.this,listContact); 
       li.setAdapter(customAdapter); 
      } 
     } 

Antwort

0

try unten Code: -

public class MainActivity extends AppCompatActivity { 
     private static final String URL = "http://domain/contact.php"; 
     CustomAdapter customAdapter; 
     int success = 0; 
     JSONParser jsonParser = new JSONParser(); 
     ArrayList<Contact> listContact = new ArrayList<Contact>(); 
     JSONObject json=null; 
     JSONArray contact=null;ListView li; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      li = (ListView) findViewById(R.id.listView); 

      new getContactAsync().execute(); 

      //int c = li.getAdapter().getCount(); not working 

     } 
    class getContactAsync extends AsyncTask<String,String,ArrayList<Contact>>{ 


      @Override 
      protected ArrayList doInBackground(String... params) { 
        json = jsonParser.getFromURL(URL); 
       try { 
        contact = json.getJSONArray("contact"); 
        success = json.getInt(TAG_SUCCESS); 
        if (success == 1) { 
         for (int i = 0; i < contact.length(); i++) { 
          JSONObject c = contact.getJSONObject(i); 
          Contact a = new Contact(); 
          a.setId(c.optInt(TAG_ID)); 
          a.setName(c.optString(TAG_NAME)); 
          a.setAddress(c.optString(TAG_ADDRESS)); 
          listContact.add(a); 
         } 
        } 
       } catch (JSONException e) { 
        Log.d("ERROR", e.toString()); 
       } 
       return listContact; 
      } 

      @Override 
      protected void onPostExecute(ArrayList<Contact> s) { 
      super.onPostExecute(s); 

      if(listContact.size()>0) 
      { 
       customAdapter = new CustomAdapter(MainActivity.this,listContact); 
       li.setAdapter(customAdapter); 
      } 
      else 
      { 
      //empty 
      } 
    } 

}

+0

dank ... thats, gearbeitet .. –

+0

Sie herzlich willkommen ... @ –

0

In Ihrer Tätigkeit haben Sie die listContact, tun, um die Größe dieses denn das bekommen, was Sie

listContact.size() 
0

Sie einfach an den Adapter sind vorbei verwenden können Ihre eigene BaseAdapter-Methode getCount()

int number_of_element_in_listview = customAdapter.getCount(); 

Aber Sie sollten es tun nach der Initialisierung der Variablen customAdapter und auch nach dem Zuweisen der Werte zu ihm in der AsyncTask getContactAsync Sie haben dafür definiert.

Ist es möglich zu prüfen, ob die Listenansicht in Oncreate leer ist?

Wenn der Wert number_of_element_in_listview 0 ist, dann hat das Listview keine Elemente.

0

Anstatt es in onCreate zu überprüfen, sollten Sie es in onPostExecute überprüfen, bevor Sie Adapter-Objekt erstellen.

@Override 
protected void onPostExecute(ArrayList<Contact> s) { 
    super.onPostExecute(s); 
    if(listContact.size()>0){ 
     customAdapter = new CustomAdapter(MainActivity.this,listContact); 
     li.setAdapter(customAdapter); 
    } 
} 

Dies wird Objekt des Adapters nur erstellen, wenn Ihre Liste Artikel enthält. Wenn es leer ist, wird kein Adapterobjekt erstellt.

Jetzt, wann immer Sie auf Adapter verweisen, sollten Sie überprüfen, ob es Null ist oder nicht, bevor Sie irgendeine Operation später durchführen.

Verwandte Themen