2012-10-01 106 views
1

我正在寫一個自定義Listview約會應用程序。 ListView控件由一個爲什麼我的自定義ListView沒有顯示所有的小部件?

  • 視圖,其顏色表示優先
  • 複選框,以選擇項目。
  • DateText,顯示什麼約會的約會是
  • MonthText,展現任命是何年何月
  • TimeText,顯示當任命爲
  • 標題,存儲約會的總結

在ListView中每一行應該是這個樣子:

enter image description here

但只有兩個小部件可見:DateText和MonthText。其餘的都不是。爲什麼會這樣?

enter image description here

XMLgetView()方法是如下:

<?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="wrap_content" > 

    <View 
     android:id="@+id/priorityView" 
     android:layout_width="20dip" 
     android:layout_height="wrap_content" 
     android:background="#cccccc" 
     android:layout_alignParentLeft="true" /> 

    <CheckBox 
     android:id="@+id/selectedCheckbox" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@id/priorityView" 
     android:layout_alignTop="@id/priorityView" 
     android:layout_toRightOf="@id/priorityView" 
     android:gravity="center"> 
    </CheckBox> 

    <TextView 
     android:id="@+id/dateText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignTop="@id/priorityView" 
     android:layout_toRightOf="@id/selectedCheckbox" 
     android:gravity="center" 
     android:paddingBottom="2dip" 
     android:paddingLeft="5dip" 
     android:paddingRight="5dip" 
     android:paddingTop="2dip" 
     android:text="@string/empty" 
     android:textSize="20dip" 
     android:textStyle="bold" /> 

    <TextView 
     android:id="@+id/monthText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@id/monthText" 
     android:layout_alignLeft="@id/dateText" 
     android:layout_alignRight="@id/dateText" 
     android:layout_below="@id/dateText" 
     android:gravity="center" 
     android:padding="5dip" 
     android:text="@string/empty" 
     android:textSize="10dip" > 
    </TextView> 

    <TextView 
     android:id="@+id/timeText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@id/priorityView" 
     android:layout_alignTop="@id/priorityView" 
     android:layout_toRightOf="@id/dateText" 
     android:gravity="center" 
     android:padding="5dip" 
     android:text="@string/empty" > 
    </TextView> 

    <TextView 
     android:id="@+id/titleText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@id/priorityView" 
     android:layout_alignParentRight="true" 
     android:layout_alignTop="@id/priorityView" 
     android:layout_toRightOf="@id/timeText" 
     android:gravity="center" 
     android:padding="5dip" 
     android:text="@string/empty" > 
    </TextView> 

</RelativeLayout> 

getView()

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

        // List views that go off the screen are recycled. 

        View recycledView = convertView; 

        if (recycledView == null) { 
         /* 
         * If there is no view to recycle (e.g. when the listview is 
         * first created) we must inflate the view from the xml file 
         * using Layout Inflater. 
         */ 

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

         recycledView = inflater.inflate(R.layout.row, null); 
        } 

        /* 
        * We now have a view to work with. We will now fill in the contents 
        * of this list view item. 
        */ 

        Appointment current = items.get(position); 
        if (current != null) { 

         Log.e("crap",current.toString()); 

         View priorityIndicator = (View) recycledView.findViewById(R.id.priorityView); 
         CheckBox selectedCheckbox = (CheckBox) recycledView.findViewById(R.id.selectedCheckbox); 
         TextView dateText = (TextView) recycledView.findViewById(R.id.dateText); 
         TextView monthText = (TextView) recycledView.findViewById(R.id.monthText); 
         TextView timeText = (TextView) recycledView.findViewById(R.id.timeText); 
         TextView titleText = (TextView) recycledView.findViewById(R.id.titleText); 

         //Set priority indictor to appropriate colour. 
         selectedCheckbox.setChecked(true); 

         switch (current.getPriority()) { 
         case PRIORITY_LOW: 
          priorityIndicator.setBackgroundColor(Color.BLUE); 
          break; 

         case PRIORITY_NORMAL: 
          priorityIndicator.setBackgroundColor(Color.GREEN); 
          break; 

         case PRIORITY_HIGH: 
          priorityIndicator.setBackgroundColor(Color.RED); 
          break; 

         default: 
          priorityIndicator.setBackgroundColor(Color.GRAY); 
          break; 
         } 

         //Leave the selected checkbox alone. 

         //Set dateText to show the date of the appointment 
         dateText.setText("29"); 
         monthText.setText("SEP"); 
         timeText.setText("11:00"); 
         titleText.setText(current.getTitle()); 
        } 

        return recycledView; 
       } 
+0

我只是在審查代碼。之所以只有兩個小部件是可見的,其餘的都不是,因爲這些是其中只有兩個小部件的數據。剩下的都是空的。只是以爲我會提到,以防其他人犯這樣一個心不在焉的錯誤:) –

回答

1

嘗試使用線性佈局與重力代替屬性相對佈局的。相對佈局不適合在列表視圖中膨脹。

+0

這工作得很好,但我仍然無法看到(優先)視圖。 –

+0

優先視圖中有什麼? –

+0

什麼都沒有。優先級使用顏色來表示優先級。它適用於如果我使用空的TextView而不是View。 –

相關問題