列表适配器:没有onclick等获取项目位置

时间:2015-12-22 23:50:50

标签: android json listview adapter android-volley

我fainaly能够在第一个url适配器类中获取第二个json url,但现在的问题就像没有orginaized我认为它是因为我没有为每个单独的项目获取url2的位置,对吗?如果是这样,我怎么能解决这个问题, 其他活动可以很好地获取第二个网址,但是在项目点击时,同时在此活动中我试图在没有点击的情况下获取。 在我从第一个url模型类获取数据并将其设置为我调用的视图后,我在内部适配器类中使用了volley        fetchurl2(字符串);在返回ConvertView;

之前

1 个答案:

答案 0 :(得分:1)

你是说在列表中的onItemClicked返回错误的项目吗?

嗯,我会简要介绍一下我遇到的一些问题,如果听起来像是其中任何一个问题。

  1. 实现onClickListener并检索在listview中单击的视图的ID无法正常工作。这对我来说似乎很不礼貌,但我总是不得不绕过这个功能。
  2. 解决方案:实现onListItemClickListener会为您提供单击的位置,因此它不依赖于Ids(例如:R.id.viewId)

    1. 列表视图会不断更改数字和值,使其显示为您点击后显示的错误值
    2. 解决方案:在封装的BaseAdapter类中保存对象引用。我对Volley没有多少经验,但是从头开始做这个需要一个类扩展BaseAdapter,你可以膨胀你自己的视图并填充数据。

      1. 确保您正在设置正确的数据以传递到您的提取类
      2. 这可能是#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();
        
         */