행에 뷰가있는 사용자 정의 BaseAdapter가 있습니다.
주로 체크 박스 (ImageView) 및 버튼 (ImageView) 및 숨겨진 텍스트 (TextView).
체크 상자를 클릭 할 때마다 드로어 블을 변경하고 작동하는 것처럼 보이지만, 오직 notifyDataSetChanged
- IMO는 중요하지 않습니다. 선을 제거하면 때때로 작동하고 때로는 작동하지 않습니다.
더 중요한 부분은 holder.expansion
을 표시하거나 숨기려면 버튼을 원하지만 작동하지 않습니다. 에 관계없이 v.getTag()
나는 또한 holder.expansion
을 사용하려고 시도했으나 작동하지 않았다.OnClickListener가 사용자 정의 BaseAdapter에서 뷰를 변경하지 않습니다.
어떻게 작동시킬 수 있습니까? 체크 박스 drawable을 변경하고 확장 텍스트를 표시/숨기려면? 내가이 만든 변경 사항의 제안에 따르면
@Override
public View getView(int position, View view, ViewGroup parent)
{
final DrugHolder holder;
if (view == null)
{
holder = new DrugHolder();
view = inflater.inflate(R.layout.drug_list_row, null);
holder.name = (TextView) view.findViewById(R.id.drug_list_name);
holder.checkbox = (ImageView) view.findViewById(R.id.drug_list_checkbox);
holder.arrow = (LinearLayout) view.findViewById(R.id.drug_list_arrow_button);
holder.expansion = (LinearLayout) view.findViewById(R.id.drug_list_expansion);
holder.fullName = (TextView) view.findViewById(R.id.drug_list_full_name);
holder.quantity = (TextView) view.findViewById(R.id.drug_list_quantity);
holder.unitDose = (TextView) view.findViewById(R.id.drug_list_unit_dose);
view.setTag(holder);
}
else
{
holder = (DrugHolder) view.getTag();
}
int colorPos = position % colors.length;
view.setBackgroundColor(colors[colorPos]);
Drug drug = allItems.get(position);
holder.name.setText(drug.Name);
holder.fullName.setText(drug.Name);
holder.quantity.setText(String.format(Locale.GERMANY, "%.2f", drug.Quantity));
holder.unitDose.setText(drug.DoseType);
holder.arrow.setTag(holder.expansion);
holder.checkbox.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
ImageView view = (ImageView) v;
if (view.isSelected())
{
view.setSelected(false);
view.setImageDrawable(context.getDrawable(R.drawable.ic_icon_checkbox_unchecked));
}
else
{
view.setSelected(true);
view.setImageDrawable(context.getDrawable(R.drawable.ic_icon_checkbox_checked));
}
notifyDataSetChanged();
}
});
holder.arrow.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
LinearLayout view = (LinearLayout) v.getTag();
if (view.getVisibility() == View.VISIBLE)
{
view.setVisibility(View.GONE);
}
else
{
view.setVisibility(View.VISIBLE);
}
notifyDataSetChanged();
}
});
return view;
}
:
if (drug.isChecked()) //Here breakpoint - enters only when entering activity
{
holder.checkbox.setImageDrawable(context.getDrawable(R.drawable.ic_icon_checkbox_checked));
}
else
{
holder.checkbox.setImageDrawable(context.getDrawable(R.drawable.ic_icon_checkbox_unchecked));
}
if (drug.isExpanded())
{
holder.fullName.setVisibility(View.VISIBLE);
}
else
{
holder.fullName.setVisibility(View.GONE);
}
holder.checkbox.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
drug.setChecked(!drug.isChecked()); // Breakpoint - enters when clicks
notifyDataSetChanged(); // After F8 goes to this line but never goes to getView again
}
});
holder.arrow.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
drug.setExpanded(!drug.isExpanded()); // Breakpoint - enters when click
notifyDataSetChanged(); // Never goes to this line after F8 - instead it jumps to View.java and shows red block with 'Source code does not match byte code
}
});
예, ListBox 항목의 CheckBox 이미지를 설정하려면이 값을 삽입해야합니다. 클릭 한 후 CheckBox 이미지를 설정하려면 onClick 메서드 내부에 삽입하고 다음으로 변경해야합니다 : drug.setChecked (! drug.isChecked()) 그리고 위의 코드. – Alexandre
확장 표시와 동일합니까? 이 경우 notifyDataSetChanged()를 실행해야합니다. –
리스너에서 마약에서 setChecked를 호출하고 notifyDataSetChanged를 호출하십시오 –