2013-12-16 2 views
1

Я мог бы поклясться, что это сработало раньше, но теперь, когда я его тестирую, у меня есть проблема. У меня есть пользовательский список, который имеет серию текстовых просмотров различной высоты. В 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 просто превращается в одну большую строку без горизонтальной прокрутки, конечно. Я написал другие приложения точно так же (насколько я могу судить), и раньше у меня не было этой проблемы?

+0

где вы устанавливаете значения текста? – keshav

+0

Они загружаются в ArrayList , называемый NOTAMS в методе onCreate. – Gavin

+0

В вашем StableArrayAdapter вы должны переопределить getView() – keshav

ответ

1

Похоже, что это была проблема с телефоном. Я полностью удалил его, а затем снова установил, и он снова работает. Спасибо, что посмотрели.