Listview将项目添加两次

时间:2016-05-30 14:33:43

标签: java android listview

我想在ListView中添加单行。当我运行下面的代码时,添加了两行,一行包含我要添加的文本,另一行包含空行。为什么要添加空的? (行[0]是一个文件,其中包含( for now )1行)

listAdapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.listviewrow, R.id.txt_listviewItem, lines){
    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        View myView = convertView;

        if (myView == null) {
            LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            myView = li.inflate(R.layout.listviewrow, null);
        } else {
            TextView txt_listviewItem = (TextView)myView.findViewById(R.id.txt_listviewItem);
            txt_listviewItem.setText(lines[0]);

        }
        return myView;
    };

... 

listView.setAdapter(listAdapter);

当我调试时,listview.setAdapter(listAdapter)在运行getView代码之前和之后之前被称为。为什么?我只打电话一次。

3 个答案:

答案 0 :(得分:1)

您使用Viewholder来避免重复。

答案 1 :(得分:0)

只是一个疯狂的猜测,但你的文本文件在第二行包含“新行”字符吗?或者,我应该说,你的文本文件确实有一行或两行,其中第二行只是一个\ n字符?

答案 2 :(得分:0)

试试这个

 listAdapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.listviewrow, R.id.txt_listviewItem, lines){
        @Override
        public View getView(int position, View convertView, ViewGroup parent){
        View myView = convertView;

            if(myView==null){
                LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                myView = li.inflate(R.layout.listviewrow, null);
                TextView txt_listviewItem = (TextView)myView.findViewById(R.id.txt_listviewItem);
                txt_listviewItem.setText(lines[0]);

            }
            return myView;
        };
 listView.setAdapter(listAdapter);