Después de comprobar muchas soluciones, ninguna de las cuales resolvió mi problema con el espacio vacío, así que decidí encontrar mi solución.
tenía dos cuestiones principales: 1) que tenía un espacio vacío debido a la vista que su visibilidad se establece ido 2) también tuve dividerHeight de 12DP, incluso si tuviera el primer número solucionado todavía tenía la altura divisor fijo de la vista de lista
Solución:
1.1) he añadido un valor lógico de los datos de la lista, para notificar el adaptador de cuál de los elementos se omiten
1.2) He creado un diseño vacío para simular un "saltado elemento"
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="0dp"
android:layout_height="0dp"/>
1,3) Tengo varios tipos de puntos de vista en mi vista de lista, el elemento seleccionado, tema ordinario y ahora saltado elemento
public class AdvancedTestAdapter extends BaseAdapter
{
private static final int REGULAR_STEP = 0;
private static final int SELECTED_STEP = 1;
private static final int SKIPPED_STEP = 2;
private static final int TYPE_MAX_COUNT = 3;
private List<AdvancedTestData> _data;
private Context _context;
private Typeface _fontTypeFace;
public AdvancedTestAdapter(Context context, List<AdvancedTestData> data)
{
_context = context;
_data = data;
_fontTypeFace = Typeface.createFromAsset(_context.getResources().getAssets(), Consts.Fonts.UniversLTStdBoldCn);
}
@Override
public AdvancedTestData getItem(int position)
{
return _data.get(position);
}
@Override
public int getCount()
{
return _data.size();
}
@Override
public long getItemId(int position)
{
return 0;
}
@Override
public int getItemViewType(int position)
{
AdvancedTestData step = getItem(position);
if(step.isSkipped())
{
return SKIPPED_STEP;
}
return _data.get(position).isStepSelected() ? SELECTED_STEP : REGULAR_STEP;
}
@Override
public int getViewTypeCount()
{
return TYPE_MAX_COUNT;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
RegularViewHolder regHolder;
SelectedViewHolder selectHolder;
AdvancedTestData item = getItem(position);
int currentStepType = getItemViewType(position);
switch (currentStepType)
{
case SKIPPED_STEP:
convertView = LayoutInflater.from(_context).inflate(R.layout.skipped_item_layout, parent, false);
break;
case REGULAR_STEP:
if (convertView == null)
{
regHolder = new RegularViewHolder();
convertView = LayoutInflater.from(_context).inflate(R.layout.advanced_test_layout, parent, false);
regHolder._regTestUpperHeader = (TextView) convertView.findViewById(R.id.advanced_test_upper_name);
regHolder._regTestLowerHeader = (TextView) convertView.findViewById(R.id.advanced_test_lower_name);
regHolder._regTestImage = (ImageView) convertView.findViewById(R.id.advanced_test_image);
regHolder._regTestWithoutLowerHeader = (TextView) convertView.findViewById(R.id.step_without_lower_header);
regHolder._regTestUpperHeader.setTypeface(_fontTypeFace);
regHolder._regTestLowerHeader.setTypeface(_fontTypeFace);
regHolder._regTestWithoutLowerHeader.setTypeface(_fontTypeFace);
convertView.setTag(regHolder);
}
else
{
regHolder = (RegularViewHolder) convertView.getTag();
}
String upperHeader = item.getTestUpperHeader();
String lowerHeader = item.getTestLowerHeader();
if(lowerHeader.isEmpty())
{
regHolder._regTestUpperHeader.setVisibility(View.GONE);
regHolder._regTestLowerHeader.setVisibility(View.GONE);
regHolder._regTestWithoutLowerHeader.setVisibility(View.VISIBLE);
regHolder._regTestWithoutLowerHeader.setText(upperHeader);
}
else
{
regHolder._regTestUpperHeader.setVisibility(View.VISIBLE);
regHolder._regTestLowerHeader.setVisibility(View.VISIBLE);
regHolder._regTestWithoutLowerHeader.setVisibility(View.GONE);
regHolder._regTestUpperHeader.setText(upperHeader);
regHolder._regTestLowerHeader.setText(lowerHeader);
}
regHolder._regTestImage.setBackgroundResource(item.getResourceId());
break;
case SELECTED_STEP:
if (convertView == null)
{
selectHolder = new SelectedViewHolder();
convertView = LayoutInflater.from(_context).inflate(R.layout.advanced_selected_step_layout, parent, false);
selectHolder._selectedTestName = (TextView) convertView.findViewById(R.id.selected_header_text);
selectHolder._selectedTestDesc = (TextView) convertView.findViewById(R.id.selected_desc_text);
selectHolder._selectedPreFinishControllers = (RelativeLayout) convertView.findViewById(R.id.prefinish_step_controllers);
selectHolder._selectedFvEndControllers = (RelativeLayout) convertView.findViewById(R.id.advanced_fv_controllers);
selectHolder._selectedNvEndControllers = (RelativeLayout) convertView.findViewById(R.id.advanced_nv_controllers);
convertView.setTag(selectHolder);
}
else
{
selectHolder = (SelectedViewHolder) convertView.getTag();
}
selectHolder._selectedPreFinishControllers.setVisibility(View.INVISIBLE);
selectHolder._selectedFvEndControllers.setVisibility(View.INVISIBLE);
selectHolder._selectedNvEndControllers.setVisibility(View.INVISIBLE);
int testIndex = item.getTestIndex();
ADVANCED_QUICK_TEST_TESPS currentStep = ADVANCED_QUICK_TEST_TESPS.valueOf(testIndex);
//show action buttons in each step in advanced mode
switch (currentStep)
{
case QUESTIONS://nothing to show
break;
case RIGHT_VERIFICATION:
case LEFT_VERIFICATION:
case BINOCULAR_BALANCE:
case SPHERE_VERIFICATION:
case ADD_VERIFICATION:
if(item.isStepPreFinished())
{
selectHolder._selectedPreFinishControllers.setVisibility(View.VISIBLE);
}
break;
case RIGHT_VA:
case LEFT_VA:
case BINO_VA:
selectHolder._selectedPreFinishControllers.setVisibility(View.VISIBLE);
break;
case FV_DONE:
selectHolder._selectedFvEndControllers.setVisibility(View.VISIBLE);
break;
case FULL_EXAM_DONE:
selectHolder._selectedNvEndControllers.setVisibility(View.VISIBLE);
break;
}
String textHeader = String.format("%s\n%s", item.getTestUpperHeader(),item.getTestLowerHeader());
selectHolder._selectedTestName.setText(textHeader);
selectHolder._selectedTestDesc.setText(item.getTestDescription());
break;
}
return convertView;
}
public void setData(List<AdvancedTestData> data)
{
_data = data;
notifyDataSetChanged();
}
public static class RegularViewHolder
{
public TextView _regTestWithoutLowerHeader;
public TextView _regTestUpperHeader;
public TextView _regTestLowerHeader;
public ImageView _regTestImage;
}
public static class SelectedViewHolder
{
public TextView _selectedTestName;
public TextView _selectedTestDesc;
public RelativeLayout _selectedPreFinishControllers;
public RelativeLayout _selectedFvEndControllers;
public RelativeLayout _selectedNvEndControllers;
}
única
Si el artículo se salta el adaptador de inflar a una composición vacía como se muestra en el paso anterior, todavía tenía el problema de altura divisor
2) para fijar la altura divisor he cambiado la altura del divisor a 0 en lugar de 12DP, cada elemento que no se salta, agregué otro diseño con fondo transparente (el color Divier en mi caso debe ser transparente) y se añade el relleno inferior de 12DP
por ejemplo uno de mis artículos
<?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"
android:background="@android:color/transparent"
android:orientation="vertical"
android:paddingBottom="12dp" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/quick_test_background_selector" >
<ImageView
android:id="@+id/advanced_test_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/done_step" />
<TextView
android:id="@+id/advanced_test_upper_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@id/advanced_test_image"
android:gravity="center_vertical"
android:text="ETAPE 1"
android:textColor="@android:color/black"
android:textSize="14sp"
android:textStyle="bold" />
<TextView
android:id="@+id/advanced_test_lower_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/advanced_test_image"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@id/advanced_test_image"
android:gravity="center_vertical"
android:text="ETAPE 1"
android:textColor="@android:color/black"
android:textSize="14sp"
android:textStyle="bold" />
<TextView
android:id="@+id/step_without_lower_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/advanced_test_image"
android:layout_alignTop="@id/advanced_test_image"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@id/advanced_test_image"
android:gravity="center_vertical"
android:text="123"
android:textColor="@android:color/black"
android:textSize="14sp"
android:textStyle="bold" />
</RelativeLayout>
</RelativeLayout>
quizás no es elegante, pero esta solución trabajado para mí
Felicitaciones por la solución. Cuando pueda, asegúrese de marcar su respuesta como 'aceptada' para que otros puedan aprender de su éxito. Cheers ~ –
no funciona para fill parent. – Thushara