Android ListView在Gingerbread上无法正常工作

时间:2013-12-16 13:10:26

标签: android listview layout android-2.3-gingerbread

我之前可以发誓这是有效的,但现在当我测试它时,我有一个问题。我有一个自定义列表视图,其中包含一系列不同高度的文本视图。在Android 4.x中它完美无缺。在我的旧2.3手机上显示列表,但它只有一行高,因此无法看到大部分文本视图。它的行为应该如此,它滚动,我可以通过长按来删除项目。

我尝试将TextView高度更改为固定值,这适用于4.x但在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;
    }

}

有什么想法吗?

编辑:我刚刚发现在我的帮助屏幕中,这只是一系列文本没有包装的TextViews。每个TextView只是变成一条大线,当然没有水平滚动。我已经用完全相同的方式编写了其他应用程序(据我所知),之前我没有遇到过这个问题?

1 个答案:

答案 0 :(得分:1)

看起来这是手机问题。我已完全卸载它,然后重新安装,它再次正常工作。谢谢你的期待。