【问题标题】:Android: Get the position of a ListView from the actual topAndroid:从实际顶部获取 ListView 的位置
【发布时间】:2013-02-28 13:13:04
【问题描述】:

我正在使用List.get(position) 来获取ListView 的位置。 但这会返回当前滚动边界顶部的位置。 我的 ListView 有 50 个项目,但一次只能看到 10 个。 因此,当您完全向下滚动并调用 List.get(position) 时,您会为列表项获得 10 而不是 50。如果您单击 ListView 正中间的项目,您会获得 5 而不是 25 等等。

如何从ListView实际 顶部获取ListView 的位置。至少是最简单的方法。

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = null;

if (convertView == null) {
  LayoutInflater inflator = context.getLayoutInflater();      
  view = inflator.inflate(R.layout.addtowatchlist, null);
  final ViewHolder viewHolder = new ViewHolder();
  viewHolder.text = (TextView) view.findViewById(R.id.label);      
  viewHolder.addbutton = (Button) view.findViewById(R.id.button);
  viewHolder.addbutton
      .setOnClickListener(new Button.OnClickListener() {
        @Override
        public void onClick(View buttonview) {
            //I need the correct ACTUAL position here, not the VISABLE position                 
            Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(list.get(position).getUrl()));
            context.startActivity(browserIntent);              
            list.get(position).getUrl();                
            Model element = (Model) viewHolder.addbutton
                      .getTag();
                  element.setSelected(true);
        }
      });
  view.setTag(viewHolder);
  viewHolder.addbutton.setTag(list.get(position));
} else {
  view = convertView;
  ((ViewHolder) view.getTag()).addbutton.setTag(list.get(position));
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.text.setText(list.get(position).getName());      
return view;

}

编辑:我认为这与使用错误的 viewHolder 调用 onClickListener 有关,但我无法弄清楚...

【问题讨论】:

  • @GrahamBorland 这个问题是寻找第一个可见位置,而不是重复。
  • 是的,我的位置目前给出了第一个可见项目,但这正是我不想要的。
  • 哎呀,你是对的。对不起。如果关闭,我将投票重新开放。

标签: android android-layout


【解决方案1】:

变量 position 已经是您的 ListView 中条目的位置。
我不知道您的列表中有什么。
以下是 BaseAdapter 如何工作以及如何正确构建 getView 的教程:http://thinkandroid.wordpress.com/2010/01/13/custom-baseadapters/

【讨论】:

    【解决方案2】:

    经过多次痛苦的尝试,我自己修复了它。缺乏了解 ListView 优化的运作方式以及 convertView 参数的作用...

    我将onClickListener 移到if (convertView == null) 块之外,并在getView 返回其视图之前将其放置。这样拍摄的位置不是回收的可见位置,而是从顶部一直到实际位置。

    @Override
      public View getView(final int position, View convertView, ViewGroup parent) {
        View view = null;
        final AiringModel am = list.get(position);      
        am.setRealPosition(position, list.get(position).getUrl());    
        LayoutInflater inflator = context.getLayoutInflater();      
        view = inflator.inflate(R.layout.addtowatchlist, null);
        final ViewHolder viewHolder = new ViewHolder();
        viewHolder.text = (TextView) view.findViewById(R.id.label);
        if (convertView == null) {
            view.setTag(viewHolder);     
        } else {
          view = convertView;
          ((ViewHolder)view.getTag()).addbutton.setTag(list.get(position));      
        }
        ViewHolder holder = (ViewHolder) view.getTag();
        holder.text.setText(list.get(position).getName());       
        viewHolder.addbutton = (Button) view.findViewById(R.id.check);    
        viewHolder.addbutton.setTag((Integer)position);    
        viewHolder.addbutton
        .setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View buttonview) {
                // TODO Auto-generated method stub                  
                int realPosition = am.getRealPosition();
                String realName = am.getRealName();
                Log.d("Pair created!", "Clicked button with position: "+ realPosition + " For item name: " + realName);
                Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(list.get(realPosition).getUrl()));
                context.startActivity(browserIntent);           
            }
        });
        return view;
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-10
      相关资源
      最近更新 更多