2016-11-19 2 views
0

My ListedActivity пуст и не содержит ошибок или исключений. Он просто сидит там, ничего не делая.Активность пустого списка, объект ListView не равен

Моя база данных не должна быть пустой, есть некоторые записи.

public class ListedActivity extends Activity { 

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

     LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     LinearLayout mContainer = (LinearLayout) inflater.inflate(R.layout.activity_list, null); 
     ListView listView = (ListView) mContainer.findViewById(R.id.listedactivity_list_view); 
     DBHelper dbHelper = new DBHelper(getApplicationContext()); 
     ArrayList<MyLayoutObject> b = dbHelper.getAllResults(); 

     MyAdapter a = new MyAdapter(this, b); 

     listView.setAdapter(a); 

     listView.setOnItemClickListener(
      new AdapterView.OnItemClickListener(){ 
       @Override 
       public void onItemClick(AdapterView<?> arg0, View view, int position, long id) { 
        Intent intent = new Intent(ListedActivity.this, ResultsActivity.class); 
        intent.putExtra("position", position); 
        intent.putExtra("id", id); 
        startActivity(intent); 
       } 
      } 
     ); 
    } 
} 

Список мероприятий должен содержать все результаты из моей базы данных. Вот он .xml.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_list" 
    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="smart.tuke.sk.makac.ListedActivity"> 

    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#eeeeee" 
     android:id="@+id/listedactivity_list_view" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@android:id/empty" 
     android:text="@string/no_data" 
     android:visibility="gone" /> 
</LinearLayout> 

Это мой макет строки. Каждая строка должна выглядеть так. Его .xml ниже.

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

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="61dp" 
     android:orientation="vertical"> 

    <TextView 
     android:id="@+id/date_recorded" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="10dp" 
     android:textSize="18sp" 
     android:textStyle="bold" 
     android:textColor="#111111" /> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/duration_recorded" /> 

     <TextView 
      android:layout_width="345dp" 
      android:layout_height="wrap_content" 
      android:id="@+id/distance_recorded" /> 

     <TextView 
      android:layout_width="345dp" 
      android:layout_height="wrap_content" 
      android:id="@+id/pace_recorded" /> 

     <TextView 
      android:layout_width="345dp" 
      android:layout_height="wrap_content" 
      android:id="@+id/calories_recorded" /> 
    </LinearLayout> 

</LinearLayout> 

MyLayoutObject 5 строк с добытчиками, не более

Помоги мне, Переполнение Кеноби, ты моя единственная надежда!

редактировать: адаптер код

class MyAdapter extends BaseAdapter{ 

    private LayoutInflater inflater; 
    private ArrayList<MyLayoutObject> objects; 

    private class ViewHolder { 
     TextView date; 
     TextView duration; 
     TextView distance; 
     TextView pace; 
     TextView calories; 
    } 

    MyAdapter(Context context, ArrayList<MyLayoutObject> objects) { 
     inflater = LayoutInflater.from(context); 
     this.objects = objects; 
    } 

    public int getCount() { 
     return objects.size(); 
    } 

    public MyLayoutObject getItem(int position) { 
     return objects.get(position); 
    } 

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

    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if(convertView == null) { 
      holder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.row_layout, null); 
      holder.date = (TextView) convertView.findViewById(R.id.date_recorded); 
      holder.distance = (TextView) convertView.findViewById(R.id.distance_recorded); 
      holder.duration = (TextView) convertView.findViewById(R.id.duration_recorded); 
      holder.pace = (TextView) convertView.findViewById(R.id.pace_recorded); 
      holder.calories = (TextView) convertView.findViewById(R.id.calories_recorded); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     holder.date.setText(objects.get(position).getDate()); 
     holder.duration.setText(objects.get(position).getDuration()); 
     holder.distance.setText(objects.get(position).getDistance()); 
     holder.pace.setText(objects.get(position).getPace()); 
     holder.calories.setText(objects.get(position).getCalories()); 
     return convertView; 
    } 
} 

И .xml адаптера

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

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="61dp" 
     android:orientation="vertical"> 

    <TextView 
     android:id="@+id/date_recorded" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="10dp" 
     android:textSize="18sp" 
     android:textStyle="bold" 
     android:textColor="#111111" /> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/duration_recorded" /> 

     <TextView 
      android:layout_width="345dp" 
      android:layout_height="wrap_content" 
      android:id="@+id/distance_recorded" /> 

     <TextView 
      android:layout_width="345dp" 
      android:layout_height="wrap_content" 
      android:id="@+id/pace_recorded" /> 

     <TextView 
      android:layout_width="345dp" 
      android:layout_height="wrap_content" 
      android:id="@+id/calories_recorded" /> 
    </LinearLayout> 

</LinearLayout> 
+0

Try сдвигая listview.setAdapter после setContentView (R.layout.activity_list) – Swr7der

+0

Я сместился их активность остается пустым –

ответ

0

Вы пытаетесь "найти" в android.R вида в надутом настраиваемое представление. Компоновка вы надувать не содержит эту точку зрения (такие виды появляются только внутри предопределенных форматов, таких как android.R.layout.simple_list_item)

Кроме того, рассмотрим следующую строку в XML вашей деятельности в: android:id="@android:id/list"

Вы на самом деле не присвоив идентификатор для элемент. Сделайте это так: android:id="@+id/listedactivity_list_view" (важный бит - это @ + id).

Теперь в вашей деятельности, сделать это: ListView listView = (ListView) mContainer.findViewById(R.id.listedactivity_list_view);

Делая это, как это, вы на самом деле ссылки на фактический элемент внутри вашей точки зрения, а не ссылки на какой-то «призрак элемент», который не существует в макете ,

EDIT: После того, как более внимательно перечитывая свой код, я наконец-то нашел этот вопрос ... Посмотрите на эти строки:

setContentView(R.layout.activity_list); 

LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
LinearLayout mContainer = (LinearLayout) inflater.inflate(R.layout.activity_list, null); 
ListView listView = (ListView) mContainer.findViewById(R.id.listedactivity_list_view); 

В строке 1 (из сниппета), вы устанавливаете содержимого для определенного ресурса компоновки. Тем не менее, в строке 3 (mContainer) вы раздуваете этот макет AGAIN - поэтому, когда вы делаете findViewById в строке 4, вы действительно ищете что-то в завышенном виде RATHER THAT THE ACUUALLY view. Таким образом, решение вашей проблемы является удалить Inflater и переменную mContainer:

setContentView(R.layout.activity_list); 

ListView listView = (ListView) findViewById(R.id.listedactivity_list_view); 
+0

Это по-прежнему пусто, даже после того, как я сделал упомянутые вами изменения. –

+0

вы уверены, что ваш адаптер работает по назначению? не могли бы вы дать нам код адаптера тоже? – Aenadon

+0

Код адаптера был отредактирован. –