Я мог бы поклясться, что это сработало раньше, но теперь, когда я его тестирую, у меня есть проблема. У меня есть пользовательский список, который имеет серию текстовых просмотров различной высоты. В Android 4.x все работает отлично. На моем старом телефоне 2,3 отображается список, но он только одна строка, поэтому большинство текстовых просмотров не видно. Он ведет себя так, как должен, но прокручивается, и я могу удалять элементы длительным нажатием.Android ListView не работает должным образом на Gingerbread
Я попытался просто изменяя TextView
высоту до фиксированного значения, и это работает на 4.х, но никакой разницы на 2,3
Вот соответствующие биты кода: notam_list.xml
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/listOfNotams"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
mylistviewstyle.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/listviewText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="6dp"
android:textSize="12sp" />
фрагменты из деятельности:
public class NotamList extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.notam_list);
final ListView listOfNotams = (ListView) findViewById(R.id.listOfNotams);
....
}
final StableArrayAdapter adapter = new StableArrayAdapter(this, R.layout.mylistviewstyle, NOTAMS);
listOfNotams.setAdapter(adapter);
listOfNotams.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public boolean onItemLongClick(AdapterView<?> parent, final View view, int position, long id) {
final String item = (String) parent.getItemAtPosition(position);
Pattern pattern;
Matcher matcher;
if (item.substring(4, 5).matches("-")) {
pattern = Pattern.compile("[A-Z][A-Z][A-Z][A-Z]-[A-Z][0-9]+/[12]\\d");
matcher = pattern.matcher(item);
matcher.find();
String notamSelected = matcher.group(0);
HiddenNotam hiddenNotam = new HiddenNotam(notamSelected, 1);
if (db.checkHiddenNotamExists(notamSelected)) {
db.deleteHiddenNotam(hiddenNotam);
Toast toast = Toast.makeText(getApplicationContext(), notamSelected + " Un-Hidden", Toast.LENGTH_SHORT);
toast.show();
} else {
db.addHiddenNotam(hiddenNotam);
if (hideNotams) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
// POSSIBLE SOLUTION TO THIS
// http://nineoldandroids.com/
NOTAMS.remove(item);
adapter.notifyDataSetChanged();
} else {
view.animate().setDuration(2000).alpha(0).withEndAction(new Runnable() {
@Override
public void run() {
NOTAMS.remove(item);
adapter.notifyDataSetChanged();
view.setAlpha(1);
}
});
}
}
Toast toast = Toast.makeText(getApplicationContext(), notamSelected + " Hidden", Toast.LENGTH_SHORT);
toast.show();
}
} else {
Toast toast = Toast.makeText(getApplicationContext(), "This can't be hidden", Toast.LENGTH_SHORT);
toast.show();
}
return true;
}
});
}
private class StableArrayAdapter extends ArrayAdapter<String> {
HashMap<String, Integer> mIdMap = new HashMap<String, Integer>();
public StableArrayAdapter(Context context, int textViewResourceId, List<String> objects) {
super(context, textViewResourceId, objects);
for (int i = 0; i < objects.size(); ++i) {
mIdMap.put(objects.get(i), i);
}
}
@Override
public long getItemId(int position) {
String item = getItem(position);
return mIdMap.get(item);
}
@Override
public boolean hasStableIds() {
return true;
}
}
Любые идеи?
EDIT: Я также только что обнаружил, что на экране справки, который является просто серией TextViews, текст не обертывается. Каждый TextView просто превращается в одну большую строку без горизонтальной прокрутки, конечно. Я написал другие приложения точно так же (насколько я могу судить), и раньше у меня не было этой проблемы?
где вы устанавливаете значения текста? – keshav
Они загружаются в ArrayList, называемый NOTAMS в методе onCreate. –
Gavin
В вашем StableArrayAdapter вы должны переопределить getView() – keshav