次のようView
に派生させようとしているカスタム集計があります。RelativeLayout
public class CheckableView extends RelativeLayout implements Checkable {
TextView mTextView;
boolean mIsChecked = false;
int mId = 0;
public CheckableView(
Context context,
AttributeSet attrs,
int defStyle,
int resource,
int textViewResourceId) throws Exception {
super(context, attrs, defStyle);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (inflater != null) {
inflater.inflate(resource, this);
this.setLayoutParams(new AbsListView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
mTextView = (TextView) findViewById(textViewResourceId);
if (mTextView == null) {
throw new Exception("The specified TextView resource Id was not found.");
}
}
}
}
resource
パラメータは、これを集約しid
たいレイアウトの であり、ステータスをグラフィカルに示す(チェックマークを付ける)の id です。CheckableView
textViewResourceId
TextView
checked
この xml は次のように定義されます。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/itemslist_categoryName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:text="@string/app_name" />
<LinearLayout
android:id="@+id/category_details_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/addedit_category_check"
android:orientation="vertical" >
<TextView
android:id="@+id/addedit_category_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="right|center_vertical"
android:text="@string/app_name" />
<TextView
android:id="@+id/addedit_category_price_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="right|center_vertical"
android:text="@string/app_name" />
</LinearLayout>
</RelativeLayout>
このカスタムビューを特定の各行として使用したいので、アダプターのListView
他の場所で、次のようにします。ListView
getView
public View getView(int position, View convertView, ViewGroup parent) {
CheckableView view = null;
if (convertView == null) {
try {
view = new CheckableView(getContext(),
null,
0,
R.layout.addedit_group_budget,
R.id.addedit_category_check);
} catch (Exception e) {
e.printStackTrace();
}
} else {
view = (CheckableView) convertView;
}
...
return view;
}
の各行には、ListView
長さが異なるテキストがあります。ビューが最初に作成されたときは、すべて問題ないように見えますが、ビューがリサイクルされ始めたとき (つまり、上下にスクロールしたとき)。幅を指定しても、テキストのTextViews
サイズに合わせてサイズが変更されないようです。wrap_content
何が欠けている可能性がありますか?以下のスクリーンショットの例。明らかにテキストを追加する余地があるにもかかわらず、一部のテキストが省略されていることに注意してください。
クラス定義から削除するimplements Checkable
と、期待どおりに動作し、これが関係していることを示しています。