2015-04-03 9 views
0

Я учусь заполнить ListView используя ArrayList. Я заселил ArrayList внутри doPostExecute() из GetParentVitalsName() не используяAndroid ListView вообще не отображается

vitalList.add(parentVitalName); 

LogCat показывает отсутствие ошибки. Но список не отображается. Я получаю только пустую страницу. Я обнаружил, что это не происходит внутри метода getViewMyListAdapter. что я делаю неправильно здесь?

acitivity_vital_list.xml содержит ListView и vital_list_layout содержит шаблон элемента

public class VitalListActivity extends ActionBarActivity { 

    private List<String> vitalList = new ArrayList<>(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_vital_list); 
     Intent intent = getIntent(); 
     String status = intent.getStringExtra(LoginActivity.EXTRA_MESSAGE); 
     if(status.equals("true")){ 
      new GetParentVitalName().execute(); 
      Log.d("Tag", "Execute complete"); 
      populateListView(); 
      Log.d("Tag", "Populate complete"); 
     } 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_vital_list, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    private void populateListView() { 
     ArrayAdapter<String> adapter = new MyListAdapter(); 
     ListView list = (ListView) findViewById(R.id.vitalsListView); 
     list.setAdapter(adapter); 
    } 

    private class MyListAdapter extends ArrayAdapter<String>{ 

     public MyListAdapter(){ 

      super(VitalListActivity.this, R.layout.vital_list_layout, vitalList); 
      Log.d("Tag", "super okay"); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      //return super.getView(position, convertView, parent); 
      //Making sure we've a view to work with(may have been given null 
      Log.d("TAG","Inside get view"); 
      View itemView = convertView; 
      if (itemView == null) 
       itemView = getLayoutInflater().inflate(R.layout.vital_list_layout, parent, false); 

      String currentVital = vitalList.get(position); 

      //Fill the view 

      TextView vitalText = (TextView) itemView.findViewById((R.id.vitalTextView)); 
      vitalText.setText(currentVital); 

      return itemView; 
     } 
     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return vitalList.size(); 
     } 
    } 

    private class GetParentVitalName extends AsyncTask<String, String, String> { 

     protected String doInBackground(String... params){ 

      String responseText = null; 

      HttpClient httpClient = ServiceHelper.getHttpClient(); 
      HttpContext localContext = new BasicHttpContext(); 
      HttpGet httpGet = new HttpGet("http://test.gogch.com/gch-restful/vitals/custome/added/parentvitals"); 
      Log.d("KMN", "Sucess"); 
      try { 
       HttpResponse response = httpClient.execute(httpGet); 
       Log.d("DFGH","Success again."); 
       int statusCode = response.getStatusLine().getStatusCode(); 
       Log.d("Http Post Response V", Integer.toString(statusCode)); 
       responseText = EntityUtils.toString(response.getEntity()); 
       Log.d("Http Post Response V", responseText); 

      } 
      catch(ClientProtocolException e){ 
       e.printStackTrace(); 
      } 
      catch (IOException e){ 
       e.printStackTrace(); 
      } 
      return responseText; 
     } 

     protected void onPostExecute(String responseText){ 

      if (responseText != null){ 
       try { 
        JSONArray vitalsArray = new JSONArray(responseText); 
        for(int i =0;i<vitalsArray.length();i++){ 
         JSONObject vitalsObject = vitalsArray.getJSONObject(i); 
         String parentVitalName = vitalsObject.getString("parentVitalName"); 
         vitalList.add(parentVitalName); 
         Log.d("YGVJ",vitalList.get(i)); 
        } 
       } 
       catch (JSONException e){ 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 

vital_list_layout.xml

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


    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/imageView" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Large Text" 
     android:id="@+id/vitalTextView" 
     android:layout_marginLeft="27dp" 
     android:layout_marginStart="27dp" 
     android:layout_alignParentTop="true" 
     android:layout_toRightOf="@+id/imageView" 
     android:layout_toEndOf="@+id/imageView" /> 
</RelativeLayout> 

activity_vital_list.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context="com.cinch.getvitalsapp.activities.VitalListActivity"> 

    <TextView android:text="Vitals" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/textView" /> 

    <ListView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/vitalsListView" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_below="@+id/textView" /> 


</RelativeLayout> 
+0

Вы использовали модельный класс? –

+0

Где «новый GetParentVitalName(). Execute();» code – Piyush

+0

вам нужно изменить свой пользовательский адаптер. make constructor в адаптере, который передает arraylist и из этого списка задает Text to textview. – Shvet

ответ

3

Logcat shows no error. But the List is not displaying. I'm only getting a blank page

Вызов notifyDataSetChanged() после добавления элементов в адаптер источника данных:

vitalList.add(parentVitalName); 
adapter.notifyDataSetChanged(); 

Примечание: убедитесь vitalList это тот же объект списка, который используется в MyListAdapter класса адаптера.

EDIT:

переопределения Также getCount() метод в MyListAdapter классе:

@Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return vitalList.size(); 
    } 
+0

Я creatng адаптера только после добавления всех элементов в список, а также не добавляя ничего после того, как адаптер создан – HeisenBerg

+0

@HeisenBerg: хорошо видеть мой ответ редактировать –

+0

Нет, не работает – HeisenBerg

1

сделать свой адаптер класса, как показано ниже.

private class MyListAdapter extends ArrayAdapter<String>{ 

Context context; 
ArrayList<String> arraylist= new Arraylist<>; 

    public MyListAdapter(Context context,ArrayList<String> arraylist){ 

     super(context, R.layout.vital_list_layout, vitalList); 
     Log.d("Tag", "super okay"); 
     this.context=context; 
     this.arraylist=arraylist; 
    } 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    //return super.getView(position, convertView, parent); 
    //Making sure we've a view to work with(may have been given null 
    Log.d("TAG","Inside get view"); 
    View itemView = convertView; 
    if (itemView == null) 
     itemView = getLayoutInflater().inflate(R.layout.vital_list_layout, parent, false); 

    // String currentVital = vitalList.get(position); 

    //Fill the view 

    TextView vitalText = (TextView) itemView.findViewById((R.id.vitalTextView)); 
    vitalText.setText(arralist.get(position)); 

    return itemView; 
} 

} 

В вашем классе деятельности. инициализировать адаптер и поставить ArrayList в него, как показано ниже:

ListView list; 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_vital_list); 
    list = (ListView) findViewById(R.id.vitalsListView); 
    Intent intent = getIntent(); 
    String status = intent.getStringExtra(LoginActivity.EXTRA_MESSAGE); 
    if(status.equals("true")){ 
     new GetParentVitalName().execute(); 
     Log.d("Tag", "Execute complete"); 
     populateListView(); 
     Log.d("Tag", "Populate complete"); 
    } 
} 

    private void populateListView() { 
     MyListAdapter adapter = new MyListAdapter(VitalListActivity.this,vitalList); //where vitalList will be get from asynctask. 
     list.setAdapter(adapter); 
     adapter.notifyDataSetChanged(); 
    } 
+0

MyListAdapter адаптера = новый MyListAdapter (VitalListActivity.это, vitalList); Эта строка дает мне ошибку .. Ошибка: (78, 81) error: несовместимые типы: Список не может быть преобразован в ArrayList HeisenBerg

0

Вы не метод GetCount() перекрытая. Попытайтесь это сделать, тогда это сработает.

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

, а затем попробуйте установить список в match_parent.

Смежные вопросы