带有 ArrayAdapter 的 Picasso
Picasso with ArrayAdapter
我只想从使用 ArrayAdapter 使用 Picasso 加载 1 张图片开始。
我想我遗漏了一些小东西(希望如此)。只是想知道是否有人可以指出我正确的方向。我收到 NullPointer 异常。
这是 MainActivity 源代码:
public class MainActivity extends AppCompatActivity {
ListView listView;
ArrayList<DataModel> dataModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
listView = (ListView) findViewById(R.id.listView);
MyAdapter adapter = new MyAdapter(this, R.layout.datamodel, dataModel);
listView.setAdapter(adapter);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(android.view.View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
适配器 class 扩展 ArrayAdapter<> class
public class MyAdapter extends ArrayAdapter<DataModel> {
Context context;
public MyAdapter(Context context, int resource, List<DataModel> objects) {
super(context, resource, objects);
this.context = context;
}
private class ViewHolder {
//Create Holder to contain inflated xml file elements//
ImageView imageView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
DataModel dataModel = getItem(position);
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.datamodel, null);
holder = new ViewHolder();
holder.imageView = (ImageView) convertView.findViewById(R.id.iconView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Picasso
.with(context)
.load("http://i.imgur.com/DvpvklR.png")
.into(holder.imageView);
return convertView;
}
}
行信息,DataModel class
public class DataModel {
int iconId;
public DataModel(int iconId) {
this.iconId = iconId;
}
public int getIconId() {
return iconId;
}
public void setIconId(int iconId) {
this.iconId = iconId;
}
}
问题出在适配器的参数 List<DataModel> objects
上。超类取消引用它而不检查空值。初始化它将修复您的 NPE
,但是当然,除非您不向其提供一些数据,否则不会调用 getView
我只想从使用 ArrayAdapter 使用 Picasso 加载 1 张图片开始。 我想我遗漏了一些小东西(希望如此)。只是想知道是否有人可以指出我正确的方向。我收到 NullPointer 异常。
这是 MainActivity 源代码:
public class MainActivity extends AppCompatActivity {
ListView listView;
ArrayList<DataModel> dataModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
listView = (ListView) findViewById(R.id.listView);
MyAdapter adapter = new MyAdapter(this, R.layout.datamodel, dataModel);
listView.setAdapter(adapter);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(android.view.View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
适配器 class 扩展 ArrayAdapter<> class
public class MyAdapter extends ArrayAdapter<DataModel> {
Context context;
public MyAdapter(Context context, int resource, List<DataModel> objects) {
super(context, resource, objects);
this.context = context;
}
private class ViewHolder {
//Create Holder to contain inflated xml file elements//
ImageView imageView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
DataModel dataModel = getItem(position);
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.datamodel, null);
holder = new ViewHolder();
holder.imageView = (ImageView) convertView.findViewById(R.id.iconView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Picasso
.with(context)
.load("http://i.imgur.com/DvpvklR.png")
.into(holder.imageView);
return convertView;
}
}
行信息,DataModel class
public class DataModel {
int iconId;
public DataModel(int iconId) {
this.iconId = iconId;
}
public int getIconId() {
return iconId;
}
public void setIconId(int iconId) {
this.iconId = iconId;
}
}
问题出在适配器的参数 List<DataModel> objects
上。超类取消引用它而不检查空值。初始化它将修复您的 NPE
,但是当然,除非您不向其提供一些数据,否则不会调用 getView