Android의 첫 번째 단계부터 저를 괴롭히는 요인은 방향이 다른 레이아웃의 사용자 지정 어댑터를 최적화하여 사용하는 것입니다. 현재 NULL 계단식으로 끝나고 더 좋은 방법이 있는지 알고 싶습니다.사용자 지정 목록 어댑터 및 세로/가로 방향에 대한 다른 레이아웃
다른 위젯 개수를 포함하는 세로 방향 및 가로 방향의 두 가지 레이아웃을 고려하십시오.
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:orientation="horizontal" >
<TextView
style="@style/TextViewDefault"
android:id="@+id/name"
android:layout_weight="1" />
</LinearLayout>
여기 레이아웃 땅에있는 두 개의 위젯을 가로 레이아웃입니다 :
다음은 레이아웃에있는 하나의 위젯 수직 레이아웃의
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:orientation="horizontal" >
<TextView
style="@style/TextViewDefault"
android:id="@+id/name"
android:layout_weight="1" />
<TextView
style="@style/TextViewDefault"
android:id="@+id/description"
android:layout_weight="1" />
<TextView
style="@style/TextViewDefault"
android:id="@+id/date"
android:layout_weight="1" />
</LinearLayout>
그리고 여기에 사용자 정의 어댑터의이 - 확장 SimpleCursorAdapter. 방위에 따라서, 설명 오브젝트 및 일자 오브젝트는 null 또는 null 이외입니다. 내 Android projetcs에는 10 번째 객체가있는 행 레이아웃이 있으며이 null-check은 코드에서 실제로 심하게됩니다. 더 나은 해결책이 있습니까? 다른 방향이나 크기에 맞게 맞춤 어댑터와 레이아웃을 어떻게 사용합니까?
public class TestAdapter extends SimpleCursorAdapter {
private static class ViewHolder {
private TextView date;
private TextView description;
private TextView name;
}
private Context context;
private Cursor cursor;
private int layout;
private SQLiteDatabase sqliteDatabase;
private MySQLiteOpenHelper sqliteOpenHelper;
public Test(final Context context, final int layout, final Cursor cursor, final String[] from, final int[] to) {
super(context, layout, cursor, from, to);
this.context = context;
this.cursor = cursor;
this.layout = layout;
if (sqliteOpenHelper == null) {
sqliteOpenHelper = new MySQLiteOpenHelper(context);
}
if (sqliteOpenHelper != null) {
if (sqliteDatabase == null) {
sqliteDatabase = sqliteOpenHelper.getWritableDatabase();
}
}
}
@Override
public View getView(final int position, final View contentView, final ViewGroup viewGroup) {
View view = null;
ViewHolder viewHolder = null;
if (contentView == null) {
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = layoutInflater.inflate(layout, null);
if (view != null) {
viewHolder = new ViewHolder();
viewHolder.date = (TextView) view.findViewById(R.id.date);
viewHolder.description = (TextView) view.findViewById(R.id.description);
viewHolder.name = (TextView) view.findViewById(R.id.name);
view.setTag(viewHolder);
}
} else {
view = contentView;
viewHolder = (ViewHolder) contentView.getTag();
}
if (viewHolder != null) {
cursor.moveToPosition(position);
String date = cursor.getString(cursor.getColumnIndex(Test.DATE));
String description = cursor.getString(cursor.getColumnIndex(Test.DESCRIPTION));
String name = cursor.getString(cursor.getColumnIndex(Test.NAME));
if (viewHolder.date != null) {
if (!StringUtils.isEmpty(date) && date.length() == 10) {
viewHolder.date.setText(Tools.formatDate(date.substring(0, 10)));
} else {
viewHolder.date.setText("");
}
}
if (viewHolder.description != null) viewHolder.description.setText(description);
if (viewHolder.name != null) viewHolder.name.setText(name);
}
return view;
}
}
당신이 확실합니까? 이는 "view = layoutInflater.inflate (layout, null)", "viewHolder = new ViewHolder()"및 "view.findViewById (R.id.name)"의 긍정적 인 결과를 항상 신뢰한다는 것을 의미합니다. 오리 엔테이션 변경 중에 너무 많은 NullPointerExceptions을 보아 왔지만 어디서나 NULL을 사용할 때만 사라졌습니다. –
흠, 이상 하네. 왜 그런지 이유를 보지 못했고 결코 실패하지 않았기 때문에 항상 그런 식으로 검사했습니다. (아주 특별한 목록보기 디자인에서도) 실패했습니다. 어쩌면 당신은 그 일을해서는 안되는 특별한 것을하고있는 것일 수 있습니다. 재활용은 항상 잘 작동해야하며 일반적으로 방향 변경과 같은 일반적인 작업 때문에 실패하지 않아야합니다. – Knickedi