0

我需要从 res/raw/file.txt 下的 txt 文件中读取数据,并在 ListView 中显示每一行。但是当应用程序启动时 ListView 是空的。这是在 onCreate 之前定义的:

private SimpleAdapter sa;
ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();

这是代码:

     InputStream inputStream = getResources().openRawResource(R.raw.definitions);
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    String line;
    try 
    {
        HashMap<String, String> item;
        while ((line = reader.readLine()) != null) 
        {
            String[] strings = TextUtils.split(line, "-");
            if (strings.length < 2) 
            {
                item = new HashMap<String, String>();
                item.put("line1", strings[0].trim());
                item.put("line2", strings[1].trim());
                list.add(item);
            }
        }
        mTextView.setText("");

        sa = new SimpleAdapter(this, list,
                R.layout.result,
                new String[] { "line1","line2" },
                new int[] {R.id.word, R.id.definition});

        mListView.setAdapter(sa);

        reader.close();


    } 
    catch(Exception e)
    {
        Toast.makeText(this, "Error", Toast.LENGTH_SHORT).show();

    }
4

2 回答 2

1

它看起来不错,但如果(strings.length <= 2)有一个小的逻辑变化。它对我有用。

尝试

            if (strings.length <= 2) {
                item = new HashMap<String, String>();
                item.put("line1", strings[0].trim());
                item.put("line2", strings[1].trim());
                list.add(item);
            }
于 2013-01-22T18:26:14.690 回答
-1

在 onCreate() 之前定义是什么意思。在 onCreate() 之前定义并不意味着它会在 onCreate() 之前被调用。当活动在 onCreate() 中启动时,您需要调用上述代码。

于 2013-01-22T18:11:55.947 回答