特定の問題に関する有用な投稿を検索するのに何時間も費やしましたが、成功しませんでした。
すべての投稿は、リストビューのレイアウトを「fill_parent」に設定することについて語っています。しかし、私のレイアウトには明示的なリスト ビューがありません。
コードは次のとおりです。
タブアダプタ:
public class TabsAdapter extends FragmentPagerAdapter implements
TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener, IconPagerAdapter {
.
.
@Override
public Fragment getItem(int position) {
TabInfo info = mTabs.get(position);
return Fragment.instantiate(mContext, info.clss.getName(),
info.args);
}
.
.
アレイアダプター:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(
R.layout.list_activity_segnalazioni_archivio_riga, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.codiceEsterno = (TextView) view
.findViewById(R.id.list_activity_segnalazione_archivio_riga_textview_codice_esterno);
viewHolder.data = (TextView) view
.findViewById(R.id.list_activity_segnalazione_archivio_riga_textview_data);
viewHolder.posizione = (TextView) view
.findViewById(R.id.list_activity_segnalazione_archivio_riga_textview_posizione);
viewHolder.codiceEsterno.setFocusable(false);
viewHolder.codiceEsterno.setFocusableInTouchMode(false);
viewHolder.data.setFocusable(false);
viewHolder.data.setFocusableInTouchMode(false);
viewHolder.posizione.setFocusable(false);
viewHolder.posizione.setFocusableInTouchMode(false);
viewHolder.removeButton = (ImageButton) view.findViewById(R.id.list_activity_segnalazione_archivio_riga_imagebutton_remove);
viewHolder.removeButton.setFocusable(false);
viewHolder.removeButton.setFocusableInTouchMode(false);
viewHolder.previewImage = (ImageView) view
.findViewById(R.id.row_image);
.
.
.
view.setTag(viewHolder);
} else {
view = convertView;
}
ViewHolder holder = (ViewHolder) view.getTag();
try {
holder.codiceEsterno.setText(segnalazioni.get(position).getCodiceEsterno());
holder.data.setText(DateUtils.formatToHumanDate(segnalazioni.get(
position).getDataInizio()));
String address = segnalazioni.get(position).getToponimo();
if (segnalazioni.get(position).getCivico() != null
&& !segnalazioni.get(position).getCivico().equals("")) {
address = address.concat(", ").concat(
segnalazioni.get(position).getCivico().toString()
.toUpperCase(Locale.ITALY));
}
holder.posizione.setText(address);
Map<String, Object> sqlParams = new HashMap<String, Object>();
sqlParams.put("identita", segnalazioni.get(position).getIdStorico());
// This retrieve a base64 image from the sqlite.
// Getting called more times that needed gives me an incredible cpu overhead
**String thumb64 = SegnalamiApplication.abatis.executeForString("getAllFileDatiByIdEntitaForThumb", sqlParams);**
if(thumb64 != null)
{
holder.previewImage.setImageBitmap(BitmapUtils.base64ToBitmap(thumb64));
}
} catch (NullPointerException e) {
e.printStackTrace();
}
return view;
}
xml レイアウト (他の GetItem 投稿とは異なる最も重要なこと):
<TabHost
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TabWidget
android:id="@android:id/tabs"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="0dp"
android:layout_height="0dp" />
<android.support.v4.view.ViewPager
android:id="@+id/archivio_pager"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
</TabHost>
この時点で、各項目が 5 回呼び出されるため、少ない要素数でオーバーヘッドが高くなります (5 つの項目は 25 回の GetItem 呼び出しを意味します)。
一緒に問題を解決できることを心から願っています。
LF