0
@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View vi=convertView;
     viewholder holder;
     if(vi==null){
        LayoutInflater inflater = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE);
            vi = inflater.inflate(R.layout.row, null);
         holder=new viewholder();

            holder.tview1=(TextView)vi.findViewById(R.id.MXname);
         holder.tview1.setOnClickListener(new OnClickListener(){
                public void onClick(View v){

                    Log.d("Name view Click","in the list");
                    }
                }
         );

            holder.tview2=(TextView)vi.findViewById(R.id.MXtnumber);
            holder.tview2.setOnClickListener(new OnClickListener(){
                public void onClick(View v){
                    Log.d("Number view Click","in the list"+position);
                }
                }
          );

           holder.imageview=(ImageView)vi.findViewById(R.id.MXdialer);
           holder.imageview.setTag(position);
         holder.imageview.setOnClickListener(new OnClickListener(){
                public void onClick(View v){
            //Integer no = new Integer(0);
                        // get the number to dial and pass to DialNo
                //madapter.this.DialNo();
                    Log.d("Dialer view Click","in the list");
                    }
                }
         );
         vi.setTag(holder);
        }
        else
            holder=(viewholder)vi.getTag();


      return vi;


    }
}
}

请参阅上面与 listview/android 相关的 getview() 适配器代码草稿,当我尝试在上面的任何 onclick 方法中使用“位置”参数时,我得到错误“无法引用内部类中的非最终变量位置定义用不同的方法” 我能做的唯一解决方法是将其设为最终变量,然后在 onclick() 方法中访问该最终变量。请建议是否有任何其他方法可以在不使用最终变量的情况下执行此操作。提前致谢

4

3 回答 3

1

您可以将每个具有 OnClickListener 的子视图的标签设置为列表中父视图的位置。这样你就可以在 OnClickListener 中调用

int pos = (int)view.getTag();

请记住,您必须在每次运行 getView 时设置位置,而不仅仅是在通货膨胀期间,因为视图会被回收,因此它们的位置会改变。

于 2013-06-24T14:53:55.590 回答
0

改变 :

@Override 
public View getView(int position,....

至:

@Override 
public View getView(final int position,
于 2013-06-24T14:50:48.877 回答
0

如果您不想将位置标记为最终位置,则将位置设置为视图的标记:

holder.tview2.setTag(position);
holder.tview2.setOnClickListener(new OnClickListener(){
                public void onClick(View v){
                    Log.d("Number view Click","in the list"+(String)v.getTag());
                }
);

顺便说一句:您不应该OnClickListener为列表的每个项目创建一个新项目。而是在您的适配器上使用holder.tview2.setOnClickListener(this);和实施。OnClickListener这当然适用于您的所有TextViewImageView.

于 2013-06-24T14:58:10.883 回答