2015-01-06 3 views
-2

내부에 ListView가있는 두 개의 레이아웃이 있습니다.
각 ListView에는 일부 TextViews 및 기타 요소가 포함되어 있습니다.
(Android Studio에서) 편집하는 동안 모든 텍스트 뷰가 검정색 텍스트로 표시됩니다.
하지만 내 애플 리케이션을 실행하면 ListView 하나에는 검은 색 TextView가 있고 다른 하나에는 흰색이있다.
차이점은 무엇입니까?
색상이 대체 된 위치는 어디입니까?TextView 텍스트 색상


기본보기 (흑백 텍스트 색상) :

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

    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:id="@+id/services" 
     android:layout_weight="1"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="@string/services_total" 
     android:id="@+id/total" 
     /> 

</LinearLayout> 

목록 항목 :

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

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:text="@string/service_title" 
      android:id="@+id/serviceItemTitle" 
      /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/service_cost" 
      android:id="@+id/serviceItemCost" 
      /> 
    </LinearLayout> 

    <CheckBox 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/serviceItemSelector" 
     android:layout_gravity="center_vertical" 
     android:checked="false" 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:clickable="false"/> 

</LinearLayout> 

문제있는보기 (흰색 텍스트 색상) :

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

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

    <!-- 
    This TextView here is just for testing. 
    It has black color while running. 
    So it seems that the problem is in ListView 
    --> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Large Text" 
     android:id="@+id/textView4" 
     android:layout_gravity="center_horizontal"/> 

</LinearLayout> 
,

목록 항목 :

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

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     > 

     <TextView 
      android:id="@+id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/title_unknown" 
      android:textAppearance="?android:attr/textAppearanceLarge"/> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/appointment_cost" 
      android:id="@+id/cost"/> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/dateTime" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/date_unknown" 
     android:layout_gravity="center_vertical" 
     android:textAppearance="?android:attr/textAppearanceLarge"/> 

</LinearLayout> 

UPDATE (어댑터) : 흰색 TextViews와 ListView에 대한

public class Services extends ArrayAdapter<Service> { 

    public Services (Context context, List<Service> services) { 
     super(context, 0, services); 
    } 

    @Override 
    public View getView (int position, View convertView, ViewGroup parent) { 
     Service service = getItem(position); 
     ViewHolder viewHolder; 
     if (convertView == null) { 
      convertView = LayoutInflater.from(getContext()).inflate(R.layout.appointment_service_item, parent, false); 
      viewHolder = new ViewHolder(); 
      viewHolder.title = convertView.findViewById(R.id.serviceItemTitle); 
      viewHolder.cost = convertView.findViewById(R.id.serviceItemCost); 
      viewHolder.selector = convertView.findViewById(R.id.serviceItemSelector); 
      convertView.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 

     ((TextView) viewHolder.title).setText(service.title); 
     String cost = new DecimalFormat("#.##").format(service.price); 
     ((TextView) viewHolder.cost).setText(String.format(getContext().getString(R.string.service_cost), cost)); 
     ((CheckBox) viewHolder.selector).setChecked(service.isSelected); 

     return convertView; 
    } 

    private static class ViewHolder { 

     View title; 
     View cost; 
     View selector; 

    } 

} 

어댑터 : 블랙 TextViews와 ListView에 대한

어댑터 :

public class History extends ArrayAdapter<Appointment> { 

    public History (Context context, List<Appointment> appointments) { 
     super(context, 0, appointments); 
    } 

    @Override 
    public View getView (int position, View convertView, ViewGroup parent) { 
     Appointment appointment = getItem(position); 
     ViewHolder viewHolder; 
     if (convertView == null) { 
      convertView = LayoutInflater.from(getContext()).inflate(R.layout.history_item, parent, false); 
      viewHolder = new ViewHolder(); 
      viewHolder.title = convertView.findViewById(R.id.title); 
      viewHolder.cost = convertView.findViewById(R.id.cost); 
      viewHolder.dateTime = convertView.findViewById(R.id.dateTime); 
      convertView.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 

     ((TextView) viewHolder.title).setText(appointment.carwash.title); 
     float cost = 0; 
     for (Service service : appointment.services) { 
      if (service.isSelected) { 
       cost += service.price; 
      } 
     } 
     ((TextView) viewHolder.cost).setText(String.format(
      getContext().getString(R.string.appointment_cost), 
      new DecimalFormat("#.##").format(cost) 
     )); 
     Calendar calendar = new GregorianCalendar(); 
     calendar.setTime(appointment.date); 
     ((TextView) viewHolder.dateTime).setText(...calendar conversions here...); 

     return convertView; 
    } 

    private static class ViewHolder { 

     View title; 
     View cost; 
     View dateTime; 

    } 

} 
+5

기기 및 에뮬레이터에서 사용되는 Android OS 버전 및 테마에 따라 다릅니다. – Yugesh

+1

리스트 어댑터를 보여주세요. –

+1

@Amrola, 어댑터로 질문을 업데이트했습니다. – seelts

답변

1

문제는 어댑터의 컨텍스트에서 발생했습니다. @Amrola 덕분에 그것을 찾을 수있었습니다.

"블랙"의 ListView ("이"어댑터에 대한 활동에서 가져온 것입니다) :

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

    ... 

    ListView services = (ListView) findViewById(R.id.services); 
    Services servicesAdapter = new Services(this, carwash.services); 
    services.setAdapter(servicesAdapter); 

    ... 
} 

"화이트"의 ListView ("이"에 대한

내가 어댑터의 ListView를 연결 한 방법이다

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

    ... 

    final ListView appointmentsView = (ListView) findViewById(R.id.appointments); 

    /* THIS IS ASYNCHRONOUS TASK!!! */ 
    DB.getAppointments(new AppointmentsGetterTask.AppointmentsGetterListener() { 
     @Override 
     public void onAppointmentsReady (List<Appointment> appointments) { 
      History history = new History(App.getContext(), appointments); 
      appointmentsView.setAdapter(history); 
     } 
    }); 
} 

그리고이 앱 클래스입니다 : 어댑터) 응용 프로그램에서 가져

,775,

솔직히, 나는 그 맥락 사이의 차이점을 모른다. 모든 의견을 환영합니다.

감사합니다.