列表视图适配器不工作,未调用getView.

Raf*_*uez 8 java android android-arrayadapter android-listview

我想我变得疯了.如此简单的东西将自定义适配器绑定到Listview让我头疼.

发布代码然后解释:

MainActivity.java

package com.example.pruebalist;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

    private static String[] data = new String[] {"0","1","2","3"};

    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        Log.v("MainActivity","Inside MainActivity");
        setContentView(R.layout.main);
        ListView lstView = (ListView)findViewById(R.id.listNoticias);

        ArrayAdapter<String> adapter = new LstAdapter(this, R.layout.row, data);
        lstView.setAdapter(adapter);
    }

}
Run Code Online (Sandbox Code Playgroud)

LstAdapter.java

package com.example.pruebalist;

import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class LstAdapter extends ArrayAdapter<String>{

    private String[] mData;
    private Context mContext;
    int layoutResourceId;

    public LstAdapter(Context context, int textViewResourceId, String[] values) {
        super(context, textViewResourceId, values);
        mContext = context;
        mData = values;
        layoutResourceId = textViewResourceId;

        Log.v("LstAdapter","Inside LstAdapter");
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View v = convertView;
        Log.v("LstAdapter","Inside getView");

        if(v==null){
            LayoutInflater inflater = ((Activity)mContext).getLayoutInflater();
            v = inflater.inflate(layoutResourceId, parent,false);
        }

        String item = mData[position];
        if(item!=null){
            TextView txtItem = (TextView)v.findViewById(R.id.texto);
            if(txtItem!=null){
                txtItem.setText(item);
            }
        }

        return v;
    }

}
Run Code Online (Sandbox Code Playgroud)

ListView永远不会显示.并且从不使用getView,logCat不显示"Inside Getview".

怎么了?

raj*_*ara 28

主要问题是

@Override
    public int getCount() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

改为

@Override
    public int getCount() {
        // TODO Auto-generated method stub
        return mData.length;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return mData[arg0];
    }
Run Code Online (Sandbox Code Playgroud)

查看列表视图和列表活动的 Vogella 教程,尝试ViewHolder在列表适配器中使用它将提高您的视图性能.

  • .....我无法相信我已经使用这种精确的方法用于自定义列表视图适配器大约50次并且遇到了这个让我花费了4个小时的麻烦. (2认同)

And*_*Res 10

这是因为您保留了getCount()返回0 的方法的默认实现,因此适配器认为没有要显示的元素ListView.

它应该回来 mData.length

@Override
public int getCount() {
   return mData.length;
}
Run Code Online (Sandbox Code Playgroud)