Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要帮助获取onClickListener中listitem的位置吗_Java_Listview - Fatal编程技术网

Java 需要帮助获取onClickListener中listitem的位置吗

Java 需要帮助获取onClickListener中listitem的位置吗,java,listview,Java,Listview,我正在使用以下LazyAdapter。我需要在单击事件中获取单击的位置。我在第20行得到了以下建议。有什么建议吗 不能在内部类中引用非最终变量位置 用不同的方法定义 import java.util.ArrayList; 导入java.util.List; 导入android.app.Activity; 导入android.content.Context; 导入android.util.Log; 导入android.view.LayoutInflater; 导入android.view.view

我正在使用以下LazyAdapter。我需要在单击事件中获取单击的位置。我在第20行得到了以下建议。有什么建议吗

不能在内部类中引用非最终变量位置 用不同的方法定义

import java.util.ArrayList;
导入java.util.List;
导入android.app.Activity;
导入android.content.Context;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.Button;
导入android.widget.ImageView;
导入android.widget.TextView;
导入android.widget.Toast;
公共类LazyAdapter扩展了BaseAdapter{
私人活动;
私人名单数据;
专用静态充气机=空;
公共图像加载器;
ArrayList text=新的ArrayList();
公共LazyAdapter(MainActivity a,列表解析的_字符串){
//TODO自动生成的构造函数存根
活动=a;
数据=解析的字符串;
充气器=(充气器)活动
.getSystemService(上下文布局\充气机\服务);
imageLoader=新的imageLoader(activity.getApplicationContext());
}
public int getCount(){
返回data.size();
}
公共对象getItem(int位置){
返回位置;
}
公共长getItemId(int位置){
返回位置;
}
公共静态类视图持有者{
公共文本查看文本;
公众形象;
公共按钮点击;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图vi=转换视图;
视窗座;
if(convertView==null){
vi=充气机充气(R.layout.item,空);
holder=新的ViewHolder();
holder.text=(TextView)vi.findViewById(R.id.text);
;
holder.image=(ImageView)vi.findViewById(R.id.image);
holder.click=(按钮)vi.findViewById(R.id.btn\u click);
holder.click.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
Toast.makeText(活动,“单击行中的按钮”,
Toast.LENGTH_LONG).show();
holder.click.setText(text.get(position));//第20行
}
});
vi.setTag(支架);
}否则
holder=(ViewHolder)vi.getTag();
holder.text.setText(“项目”+位置);
holder.image.setTag(data.get(position));
imageLoader.DisplayImage(data.get(位置)、activity、holder.image);
返回vi;
}
}

像这样声明
getView

public View getView(final int position, View convertView, ViewGroup parent) {
    final ViewHolder holder;
    //...
}
匿名内部类
只能访问
final
局部变量


这是因为内部类的代码可能在初始化类的方法完成后被调用,并且它的局部变量被垃圾回收。声明变量
final
使变量成为常量,并将其作为值而不是引用发送到内部类。

声明
getView
如下:

public View getView(final int position, View convertView, ViewGroup parent) {
    final ViewHolder holder;
    //...
}
匿名内部类
只能访问
final
局部变量


这是因为内部类的代码可能在初始化类的方法完成后被调用,并且它的局部变量被垃圾回收。声明变量
final
使变量成为常量,并将其作为值而不是引用发送到内部类。

只需使用具有构造函数->MyOwnClickListener(位置)的属性位置实现您自己的OnClickListener类,并实现onClick的逻辑

class MyOwnClickListener implements OnClickListener {
        int position;

        public MyOwnClickListener(int position) {
            this.position = position;
        }

        @Override
        public void onClick(View v) {
....
并在getView方法中设置侦听器:

holder.click.setOnClickListener(new MyOwnClickListener(position) {

只需使用具有constructor->myownclicklister(position)的属性position实现您自己的OnClickListener类,并实现onClick的逻辑

class MyOwnClickListener implements OnClickListener {
        int position;

        public MyOwnClickListener(int position) {
            this.position = position;
        }

        @Override
        public void onClick(View v) {
....
并在getView方法中设置侦听器:

holder.click.setOnClickListener(new MyOwnClickListener(position) {

我不希望它是最终的。如果我使用位置作为final,那么它的行为将像一个常量。@tibtof尝试在ListView中使用20多个项目运行此代码,您就会知道为什么他不能为变量(int position)定义final。我也面临着同样的问题,所以我在寻找解决方案。我不希望它是最终的。如果我使用位置作为final,那么它的行为将像一个常量。@tibtof尝试在ListView中使用20多个项目运行此代码,您就会知道为什么他不能为变量(int position)定义final。我也面临着同样的问题,因此正在寻找解决方案。。