From: Reimar Döffinger Date: Sun, 10 Dec 2017 23:19:52 +0000 (+0100) Subject: Minor cleanup of DictionaryManager ListView adapter. X-Git-Url: http://gitweb.fperrin.net/?p=Dictionary.git;a=commitdiff_plain;h=be6ef0a43f51df4ea0d0f1547e06a17ea0e90e2e Minor cleanup of DictionaryManager ListView adapter. --- diff --git a/src/com/hughes/android/dictionary/DictionaryManagerActivity.java b/src/com/hughes/android/dictionary/DictionaryManagerActivity.java index a328b98..ca0c5e1 100644 --- a/src/com/hughes/android/dictionary/DictionaryManagerActivity.java +++ b/src/com/hughes/android/dictionary/DictionaryManagerActivity.java @@ -608,30 +608,33 @@ public class DictionaryManagerActivity extends ActionBarActivity { } @Override - public View getView(int position, View convertView, ViewGroup parent) { - if (convertView instanceof LinearLayout && - convertView != dictionariesOnDeviceHeaderRow && - convertView != downloadableDictionariesHeaderRow) { - /* - * This is done to try to avoid leaking memory that used to - * happen on Android 4.0.3 - */ - ((LinearLayout) convertView).removeAllViews(); - } + public int getViewTypeCount() { + return 3; + } + @Override + public int getItemViewType(int position) { final Row row = getItem(position); + if (row.dictionaryInfo == null) { + return row.onDevice ? 0 : 1; + } + return 2; + } - if (row.onDevice) { - if (row.dictionaryInfo == null) { - return dictionariesOnDeviceHeaderRow; - } - return createDictionaryRow(row.dictionaryInfo, parent, true); + @Override + public View getView(int position, View convertView, ViewGroup parent) { + if (convertView == dictionariesOnDeviceHeaderRow || + convertView == downloadableDictionariesHeaderRow) { + return convertView; } + final Row row = getItem(position); + if (row.dictionaryInfo == null) { - return downloadableDictionariesHeaderRow; + assert convertView == null; + return row.onDevice ? dictionariesOnDeviceHeaderRow : downloadableDictionariesHeaderRow; } - return createDictionaryRow(row.dictionaryInfo, parent, false); + return createDictionaryRow(row.dictionaryInfo, parent, convertView, row.onDevice); } } @@ -644,10 +647,16 @@ public class DictionaryManagerActivity extends ActionBarActivity { } private View createDictionaryRow(final DictionaryInfo dictionaryInfo, - final ViewGroup parent, boolean canLaunch) { + final ViewGroup parent, View row, boolean canLaunch) { - View row = LayoutInflater.from(parent.getContext()).inflate( + if (row == null) { + row = LayoutInflater.from(parent.getContext()).inflate( R.layout.dictionary_manager_row, parent, false); + } else { + // TODO: avoid this + LinearLayout buttons = (LinearLayout) row.findViewById(R.id.dictionaryLauncherButtons); + buttons.removeAllViews(); + } final TextView name = (TextView) row.findViewById(R.id.dictionaryName); final TextView details = (TextView) row.findViewById(R.id.dictionaryDetails); name.setText(application.getDictionaryName(dictionaryInfo.uncompressedFilename)); @@ -710,21 +719,20 @@ public class DictionaryManagerActivity extends ActionBarActivity { if (broken) { name.setText("Broken: " + application.getDictionaryName(dictionaryInfo.uncompressedFilename)); builder.append("; Cannot be used, redownload, check hardware/file system"); - // Allow deleting, but cannot open - row.setLongClickable(true); } details.setText(builder.toString()); if (canLaunch) { - row.setClickable(true); row.setOnClickListener(new IntentLauncher(parent.getContext(), DictionaryActivity.getLaunchIntent(getApplicationContext(), application.getPath(dictionaryInfo.uncompressedFilename), dictionaryInfo.indexInfos.get(0).shortName, ""))); // do not setFocusable, for keyboard navigation // offering only the index buttons is better. - row.setLongClickable(true); } + row.setClickable(canLaunch); + // Allow deleting, even if we cannot open + row.setLongClickable(broken || canLaunch); row.setBackgroundResource(android.R.drawable.menuitem_background); return row;