我fainaly能够在第一个url适配器类中获取第二个json url,但现在的问题就像没有orginaized我认为它是因为我没有为每个单独的项目获取url2的位置,对吗?如果是这样,我怎么能解决这个问题, 其他活动可以很好地获取第二个网址,但是在项目点击时,同时在此活动中我试图在没有点击的情况下获取。 在我从第一个url模型类获取数据并将其设置为我调用的视图后,我在内部适配器类中使用了volley fetchurl2(字符串);在返回ConvertView;
之前答案 0 :(得分:1)
你是说在列表中的onItemClicked返回错误的项目吗?
嗯,我会简要介绍一下我遇到的一些问题,如果听起来像是其中任何一个问题。
解决方案:实现onListItemClickListener会为您提供单击的位置,因此它不依赖于Ids(例如:R.id.viewId)
解决方案:在封装的BaseAdapter类中保存对象引用。我对Volley没有多少经验,但是从头开始做这个需要一个类扩展BaseAdapter,你可以膨胀你自己的视图并填充数据。
这可能是#1s问题的结果,但通常是如果您要分配视图控件,请确保它们都有自己的唯一引用,并相对于膨胀的视图进行检索:
//Method inflates a view as part of an implementation of BaseAdapter
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LayoutInflaterService);
convertView = inflater.inflater(R.layout.MYVIEW, parent, false);
//Note the retrieval relative to the view being inflated
final TextView tvURL = (TextView)convertView.findViewById(R.id.tvURL);
tvURL.setText("www.stackoverflow.com");
tvURL.setOnClickListener(new View.OnClickListener()
fetchURL(tvURL.getText().toString());
return convertView;
}
修改
示例适配器:
public class MyAdapter extends BaseAdapter {
private Context context = null;
private ArrayList<CustomItem> items = new ArrayList<>();
public MyAdapter(Context context, ArrayList<CustomItem> items)
{
this.context = context;
this.items = items;
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
//will never exceed position as that has a range of 0 to the size we give
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.mylistitem);
TextView tvName = (TextView)convertView.findViewById(R.id.tvName);
ImageView ivFeature = (ImageView)convertView.findViewById(R.id.ivFeature);
TextView tvDescription = (TextView)convertView.findViewById(R.id.tvDescription);
CustomItem item = items.get(position);
tvName.setText(item.getName());
tvDescription.setText(item.getDescription());
//Call for your item to process a picture into a bitmap then
ivFeature.setImageBitmap(item.getFeatureImage());
return convertView;
}
}
/*
//Instantiation:
myListView = (ListView)findViewById(R.id.myListView);
MyAdapter adapter = new MyAdapter(Activity.this, myItemsList);
myListView.setAdapter(adapter);
myListView.invalidate();
*/