Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.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 Android ListView点击按钮获取行_Java_Android_Listview - Fatal编程技术网

Java Android ListView点击按钮获取行

Java Android ListView点击按钮获取行,java,android,listview,Java,Android,Listview,我有一个用于listview的自定义适配器类,我希望能够通过单击特定行上的按钮来访问该行的内容。我试图创建一个ViewHolder,但是当我尝试单击它时,我得到了一个NPE错误 static class ViewHolder { TextView camera; TextView players; TextView max_players; ImageView privata; Button Buton; } @Override public View g

我有一个用于listview的自定义适配器类,我希望能够通过单击特定行上的按钮来访问该行的内容。我试图创建一个ViewHolder,但是当我尝试单击它时,我得到了一个NPE错误

static class ViewHolder {
    TextView camera;
    TextView players;
    TextView max_players;
    ImageView privata;
    Button Buton;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {

    String variabile[] = getItem(position).split("\\s+");
    LayoutInflater linflater = LayoutInflater.from(getContext());
        View customView = linflater.inflate(R.layout.custom_row, parent, false);
        final ViewHolder holder = new ViewHolder();
        holder.camera = (TextView) customView.findViewById(R.id.Nume);
        holder.players = (TextView) customView.findViewById(R.id.players);
        holder.max_players = (TextView) customView.findViewById(R.id.max_players);
        holder.privata = (ImageView) customView.findViewById(R.id.privata);
        holder.Buton = (Button) customView.findViewById(R.id.Buton);
        holder.camera.setText(variabile[0]);
        if (!variabile[1].equals("true")) {
            parola = false;
            holder.privata.setVisibility(View.INVISIBLE);
        }
        holder.players.setText(variabile[2]);
        holder.max_players.setText(variabile[3]);
        room_id = variabile[4];
        nume = variabile[5];
        holder.Buton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                hash = new HashMap<String, String>();
                hash.put("name", nume);
                hash.put("room", room_id);
                if (intra) {
                    holder.Buton.setText("Iesi");
                    site = siteul + "/join";
                    intra = false;
                } else {
                    holder.Buton.setText("Intra");
                    site = siteul + "/leave";
                    intra = true;
                }
                new ATask().execute(site);
            }
        });
    return customView;
}
静态类视图保持器{
文本视图摄像机;
文本视图播放器;
TextView max_播放器;
ImageView privata;
巴顿;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
字符串variabile[]=getItem(position).split(\\s+);
LayoutInflater linflater=LayoutInflater.from(getContext());
视图customView=linflater.flate(R.layout.custom_行,父项,false);
最终视图持有者=新的视图持有者();
holder.camera=(TextView)customView.findViewById(R.id.Nume);
holder.players=(TextView)customView.findViewById(R.id.players);
holder.max\u players=(TextView)customView.findViewById(R.id.max\u players);
holder.privata=(ImageView)customView.findViewById(R.id.privata);
holder.Buton=(按钮)customView.findViewById(R.id.Buton);
holder.camera.setText(变量[0]);
如果(!variabile[1].equals(“true”)){
帕罗拉=假;
持有者.privata.setVisibility(视图.不可见);
}
holder.players.setText(variabile[2]);
holder.max_players.setText(variabile[3]);
房间id=可变[4];
nume=可变[5];
holder.Buton.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
hash=新的HashMap();
hash.put(“name”,nume);
hash.put(“房间”,房间id);
如果(内部){
持有人:Buton.setText(“Iesi”);
site=siteul+“/join”;
内部=假;
}否则{
持有人:Buton.setText(“内部”);
site=siteul+“/离开”;
内部=真;
}
新建ATask().execute(站点);
}
});
返回自定义视图;
}

您需要检查convertView是否为空,因此它是否已经被访问过,然后将支架存储在标签中,如

    ViewHolder holder;
    if (convertView == null) {
        LayoutInflater linflater = LayoutInflater.from(getContext());
        holder = linflater.inflate(R.layout.custom_row, parent, false);....
        convertView.setTag(holder);
    }else{
      holder = (ViewHolder) convertView.getTag();
    }//Common code

当使用ViewHolder模式时,您应该检查convertView是否为null或是否在之前、在getView方法中以及之后使用setTaggetTag方法创建。像这样:

    if (convertView == null) 
    {
        LayoutInflater linflater = LayoutInflater.from(getContext());
        convertView = linflater.inflate(R.layout.your_list_item_view, parent, false);
         viewHolder.textView = (TextView)convertView.findViewById([the id]);
         .
         .
         .

        convertView.setTag(holder);
    }
    else
    {
      holder = (ViewHolder) convertView.getTag();
    }

上面说holder不能是linflater。充气(…),因为它应该是一个视图。同样,holder不能是linflater。充气(…),因为它应该是一个视图。现在它工作了,但我遇到了另一个错误。当我按下按钮时,文本显示正确,但无论按下哪个按钮,我声明的全局保持器似乎与最后一行的保持器相等。我正在尝试从其他函数修改其内容。请将新错误添加为新问题或编辑您的问题,包括完整的适配器实现。这样我们就能知道出了什么问题