SetAdapter仅适用于String []

时间:2015-04-28 22:02:01

标签: android android-arrayadapter

我对android编程很新,并且已经遇到了一个问题一周了。有许多类似的线程已经完成了我想要做的事情,但它们并不完全是我想要的。或者至少我无法理解他们所说的话。

我有一个杂货清单,每行一个。格式为:

true  grocery name
true  Another Grocery
false third grocery

我正在我的主要活动中阅读此文件,并使用固定的页眉和页脚以及另一个XML中的可滚动动态中间层构建其XML,其中listview内部带有checkbox 。我已经构建了(实际上,Google' d)适配器来读取字符串数组中的文件,然后将第一个单词(true / false)应用于checkbox,其余部分应用于复选框文字。不幸的是,这只适用于列表中的第一项。

当我有一个标题并且我的主要类正在扩展ListActivity时,这最初工作。但由于我想要更多按钮,我将其更改为Action Bar,从那时起我无法使用SetListAdapter,而是被迫使用SetAdapter。有人能告诉我为什么它只对第一行起作用而不是全部。

我预感到SetAdapter而不是SetListAdapter可能会搞砸它。但我不确定。如果您还需要查看我的XML结构,请告诉我。

我的代码如下:

   File sdcard = Environment.getExternalStorageDirectory();
   File groceryList = new File(sdcard, "grocery.txt" );

    // Method to read Data from file
    private void readFile() {

        StringBuilder text = new StringBuilder();

    try {
        BufferedReader br = new BufferedReader(new FileReader(groceryList));
        String line;
        ArrayList<String> item = new ArrayList<String>();

        while ((line = br.readLine()) != null) {

            item.add(line);
        }
        String[] values = item.toArray(new String[item.size()]);

        br.close();

        ListView list = (ListView)findViewById(R.id.container);
        list.setAdapter(new GroceryListAdapter(this,values));

        //list.setAdapter(new ArrayAdapter<String>(this, R.layout.checkbox, 

    R.id.label, values));
        }
        catch (IOException e) {
            ToastMsg("Read Failed!! " + e.getMessage());
        }
    }

这是我的适配器:

package in.hardikar.apps.grocerylist;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.Toast;

public class GroceryListAdapter extends ArrayAdapter<String> {
    private final Context context;
    private final String[] values;

    public GroceryListAdapter(Context context, String[] values) {
        super(context, R.layout.checkbox, values);
        this.context = context;
        //Confirmed that the entire file is loading in String[] Values
        this.values = values;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View rowView = inflater.inflate(R.layout.checkbox, parent, false);
        // Inflate the content into the container
        //TextView textView = (TextView) rowView.findViewById(R.id.label);
        //ImageView imageView = (ImageView) rowView.findViewById(R.id.logo);

        CheckBox checkBox = (CheckBox) rowView.findViewById(R.id.label);
        Toast.makeText(context, values[position] + " Loaded", Toast.LENGTH_SHORT).show();
        //textView.setText(values[position]);
        String line = values[position];
        String data[] = line.split(" ",2);

        checkBox.setText(data[1]);
        if(data[0].equalsIgnoreCase("true")) {
            checkBox.setChecked(true);
        }
        else {
            checkBox.setChecked(false);
        }
        //inflater.inflate(R.layout.checkbox, list);
        return rowView;
    }
}

1 个答案:

答案 0 :(得分:1)

找到答案here

您无法在滚动视图中找到列表视图。 ListView可以自己处理滚动.. wohooo

current documentation说:“你永远不应该使用带有ListView的ScrollView,因为ListView负责自己的垂直滚动。最重要的是,这样做会使ListView中的所有重要优化都无法处理大型列表,因为它有效地强制ListView显示其整个项目列表,以填充ScrollView提供的无限容器。“