2016-11-19 71 views
0

我列出的活動是空白的,不會引發錯誤或異常。它只是坐在那裏,什麼也不做。空白列表活動,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

嘗試轉移listview.setAdapter後的setContentView(R.layout.activity_list) – Swr7der

+0

我轉移他們的活動仍是空白 –

回答

0

您正在試圖 「發現」 在您的充氣自定義視圖的android.R視圖。您正在膨脹中不包含這種觀點的佈局(這種觀點只顯示預定義的佈局中,如android.R.layout.simple_list_item

此外,在活動的XML考慮這一行:android:id="@android:id/list"

你是不是真的分配一個ID元素。這樣做:android:id="@+id/listedactivity_list_view"(重要的是@ + id)。現在

,在您的活動,這樣做:ListView listView = (ListView) mContainer.findViewById(R.id.listedactivity_list_view);

通過做這樣,你實際上是引用您的視圖中的實際元素,而不是引用一些「鬼元素」,這並不在你的佈局存在。

編輯:重新閱讀你的代碼更仔細地之後,我終於找到了問題......看看這些行:

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)中,您再次將此佈局誇大 - 因此,當您在第4行中執行findViewById時,實際上是在充氣視圖中尋找某些東西,而不是實際顯示的視圖。因此,解決您的問題是消除充氣和mContainer變量:

setContentView(R.layout.activity_list); 

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

它仍然是空白,即使在我做了你提到的改變之後。 –

+0

你確定你的適配器按預期工作嗎?你能否給我們一些適配器代碼? – Aenadon

+0

適配器代碼編輯爲。 –