我想我变得疯了。如此简单的东西将自定义适配器绑定到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”。
怎么了?
答案 0 :(得分: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;
}
将其更改为
@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 Tutorial on List View & List Activity,尝试在列表适配器中使用 ViewHolder
,这将提高您的观看效果。
答案 1 :(得分:10)
这是因为您保留了getCount()
方法的默认实现,该方法返回0,因此适配器认为ListView
中没有要显示的元素。
它应该返回mData.length
@Override
public int getCount() {
return mData.length;
}
答案 2 :(得分:3)
您尚未实施getCount()
和getItemId(...)
。
如果您不打算为它们进行自定义实施,您可以取出这些方法并使用默认值。
暂时取出它们然后尝试。
答案 3 :(得分:2)
这样做的正确方法是致电super(context, textViewResourceId, values)
- 你已经在做了。在这种情况下,您可以完全删除getCount()
和getItemId(...)
功能。您的List来自的类将自动返回正确的值。