列表视图适配器不工作,getView不被调用。

我觉得我疯了。 有一件很简单的事情把一个自定义的适配器绑定到一个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); } } 

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; } } 

ListView从不显示。 并且getView从不使用,logCat不显示“Inside Getview”。

怎么了?

Solutions Collecting From Web of "列表视图适配器不工作,getView不被调用。"

主要问题是

 @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 int getCount() { // TODO Auto-generated method stub return mData.length; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return mData[arg0]; } 

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

这是因为您遗留了返回0的getCount()方法的默认实现,所以Adapter认为在ListView中没有显示元素。

它应该返回mData.length

 @Override public int getCount() { return mData.length; } 

你还没有实现getCount()getItemId(...)

你可以取出这些方法,并使用默认值,如果你不打算需要自定义执行。

现在把他们拿出来,然后尝试。

这样做的正确方法是调用super(context, textViewResourceId, values) – 你已经在做。 在这种情况下,您可以完全删除getCount()getItemId(...)函数。 你的列表被驱动的类将自动返回正确的值。

  • 干杯