ListView
에 대한 사용자 정의 ArrayAdapter
은 XML로 별도로 정의 된 사용자 정의 행 레이아웃을 사용합니다. 레이아웃은 RelativeLayout
에 합쳐진 TextViews
과 ImageView
의 3 개입니다. 성능 향상을 위해 어댑터는 here과 같은 ViewHolder 시스템을 사용하여 새로운 뷰를 확장하지 않고 기존 뷰를 변환합니다. ArrayAdapter.getView()
에서 어댑터는 부울 값에 따라 첫 번째 TextView를 굵게 또는 굵게 표시해야합니다.Android ArrayAdapter가 제대로 변환되지 않습니다.
처음 앱을 열면 모든 TextView가 제대로 굵게 표시되거나 굵게 표시되지 않습니다. 그러나 ListView의 맨 아래로 스크롤 한 다음 맨 위로 스크롤하면 모든 제목 TextViews가 굵은 글씨로 표시됩니다. 나는 그것이 이미 과감한 기존의 견해를 전환하는 것과 관련이 있다고 생각하지만, 그것이 무엇인지 알 수는 없다. Android Studio를 사용하여 앱을 디버깅했으며, 정상적으로 실행될 것입니다. 다시 스크롤하면 어댑터가 디버그 창에서 제대로 굵게 표시하거나 펼치지 않지만 모두 앱에서 대담하게 보입니다.
내가 알아챈 사실 중 하나는 TextView의 속성을 "굵게"로 변경하면 모든 제목 TextViews가 처음부터 굵게 표시되고 변경되지 않는다는 것입니다. textStyle
을 제거하거나 시작시 TextViews가 정상인 "normal"로 설정 한 경우에만 해당됩니다.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
PostShell shell = postShellList.get(getCount() - 1 - position); //I stack my ListView backwards, so index 0 is at the bottom
ViewHolder holder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.row_layout, parent, false);
holder = new ViewHolder();
holder.firstLine = (TextView) convertView.findViewById(R.id.firstLine);
holder.secondLine = (TextView) convertView.findViewById(R.id.secondLine);
holder.thirdLine = (TextView) convertView.findViewById(R.id.thirdLine);
holder.image = (ImageView) convertView.findViewById(R.id.image);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.firstLine.setText(shell.postTitle);
if (shell.unread) {
holder.firstLine.setTypeface(holder.firstLine.getTypeface(), Typeface.BOLD);
} else {
holder.firstLine.setTypeface(holder.firstLine.getTypeface(), Typeface.NORMAL);
}
//convert other TextViews
}
내 ViewHolder 클래스는 몇 TextViews 및 이미지 뷰와 단지 정적 인 클래스입니다. ListView
가 특정 위치에있는 요소를 요구하는 경우
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="88dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="84dp"
android:paddingRight="16dp"
android:paddingTop="6dp"
android:id="@+id/firstLine"
android:ellipsize="end"
android:text="First"
android:textStyle="normal"
android:singleLine="true" />
<!-- other views -->
</RelativeLayout>
복사 및 붙여 넣기의 저주 ... 내 대답 : 0X0nosugar @ – 0X0nosugar
없음 문제를 해결 주셔서 감사합니다, 응답에 대한 감사합니다! :) – weirdo16