2016-11-07 5 views
-1

ich einige Code aus dem Internet neu zu schreiben, wenn ich es versuchen, die Listenansicht nicht alles nur eine leere Aktivität zeigte Hier ist der Code:Benutzerdefinierte Listenansicht nicht zeigen Artikel

Adapter.java:

public class Adapter extends BaseAdapter{ 
    private Activity activity; 
    private LayoutInflater inflater; 
    private List<DataAnggota> items; 

    public Adapter(Activity activity, List<DataAnggota> items) { 
     this.activity = activity; 
     this.items = items; 
    } 

    @Override 
    public int getCount() { 
     return items.size(); 
    } 

    @Override 
    public Object getItem(int location) { 
     return items.get(location); 
    } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     if (inflater == null) 
      inflater = (LayoutInflater) activity 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     if (convertView == null) 
      convertView = inflater.inflate(R.layout.view_user_list, null); 

     TextView id = (TextView) convertView.findViewById(R.id.id); 
     TextView nama = (TextView) convertView.findViewById(R.id.nama); 
     TextView status = (TextView) convertView.findViewById(R.id.status); 

     DataAnggota data = items.get(position); 

     id.setText(data.getId_anggota()); 
     nama.setText(data.getNama()); 
     status.setText(data.getStatus()); 

     return convertView; 
    } 
} 

ViewUser.java

public class ViewUser extends AppCompatActivity { 

    ListView list; 
    List<DataAnggota> itemList = new ArrayList<DataAnggota>(); 
    Adapter adapter; 
    LayoutInflater inflater; 
    String url_viewuser = "http://10.0.2.2/test/viewuser.php"; 
    private static final String TAG = MainActivity.class.getSimpleName(); 

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

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

     adapter = new Adapter(ViewUser.this, itemList); 
     list.setAdapter(adapter); 
     callVolley(); 

    } 
    private void callVolley(){ 
     itemList.clear(); 
     adapter.notifyDataSetChanged(); 

     // membuat request JSON 
     JsonArrayRequest jArr = new JsonArrayRequest(url_viewuser, new Response.Listener<JSONArray>() { 
      @Override 
      public void onResponse(JSONArray response) { 
       Log.d(TAG, response.toString()); 
       for (int i = 0; i < response.length(); i++) { 
        try { 
         JSONObject obj = response.getJSONObject(i); 

         DataAnggota item = new DataAnggota(); 

         item.setId_anggota(obj.getString("id_anggota")); 
         item.setNama(obj.getString("nama")); 
         item.setStatus(obj.getString("status")); 
         itemList.add(item); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
       adapter.notifyDataSetChanged(); 
      } 
     }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
      } 
     }); 
     AppController.getInstance(ViewUser.this).addToRequestQueue(jArr); 
    } 

} 

activity_view_user.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_view_user" 
    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="com.rzproject.koperasi.ViewUser"> 

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

</RelativeLayout> 

view_user_list.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/id"/> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/nama"/> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/status"/> 

</LinearLayout> 

viewuser.php

include "init.php"; 

    $query = mysql_query("SELECT * FROM anggota ORDER BY id_anggota ASC"); 

    $json = array(); 

    while($row = mysql_fetch_assoc($query)){ 
     $json[] = $row; 
    } 

    echo json_encode($json); 

    mysql_close($con); 

jeder Code falsch? bitte helfen

+0

Versuchen Sie, den Adapter einzustellen, nachdem Sie Ihre ArrayList gefüllt haben. Momentan setzen Sie es mit einem leeren Array und Sie aktualisieren die lokale Arraylist und nicht die in der Listview verwendete Arraylist. –

+0

@JordiSipkens können Sie mir eine Lösung geben? Ich versuche, callVolley-Methode zu verschieben, aber einige noch leer und einige machen meine App Kraft geschlossen – agrarendzo

Antwort

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

    callVolley(); 
} 

private void setupList(){ 
    list = (ListView) findViewById(R.id.listView); 

    adapter = new Adapter(ViewUser.this, itemList); 
    list.setAdapter(adapter); 
} 

private void callVolley(){ 
    itemList.clear(); 
    adapter.notifyDataSetChanged(); 

    // membuat request JSON 
    JsonArrayRequest jArr = new JsonArrayRequest(url_viewuser, new Response.Listener<JSONArray>() { 
     @Override 
     public void onResponse(JSONArray response) { 
      Log.d(TAG, response.toString()); 
      for (int i = 0; i < response.length(); i++) { 
       try { 
        JSONObject obj = response.getJSONObject(i); 

        DataAnggota item = new DataAnggota(); 

        item.setId_anggota(obj.getString("id_anggota")); 
        item.setNama(obj.getString("nama")); 
        item.setStatus(obj.getString("status")); 
        itemList.add(item); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
      setupList(); 
     } 
    }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      VolleyLog.d(TAG, "Error: " + error.getMessage()); 
     } 
    }); 
    AppController.getInstance(ViewUser.this).addToRequestQueue(jArr); 
} 

Hoffe, das ist klar genug. Laden Sie zuerst Ihre Daten, nach dem Laden setzen Sie einfach den ListView + Adapter.

Wenn Sie die Daten AGAIN ändern möchten, erstellen Sie einfach eine Methode im Adapter, um die Listenansicht festzulegen, und rufen Sie dann die Methode notifydatasetchanged auf. Auf diese Weise aktualisieren Sie die Liste innerhalb des Adapters und weisen dann die Listenansicht an, sich neu zu zeichnen.

+0

Ich habe NullPointerException Fehler – agrarendzo

+0

wo haben Sie einen Nullzeiger bekommen? –

Verwandte Themen