Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.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/9/blackberry/2.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
Android 如果侦听器调用错误的案例_Android_Onclicklistener - Fatal编程技术网

Android 如果侦听器调用错误的案例

Android 如果侦听器调用错误的案例,android,onclicklistener,Android,Onclicklistener,我有一个使用CustomAdapter的listView,listView项包含一个按钮,我在CustomAdapter中创建了一个OnClickListener,根据按钮的位置使用开关(位置)处理按钮除最后一个案例(即案例4)外,所有案例都运行良好,当我单击它时,OnClickListener调用案例0。我认为案例4的代码中有某种东西使应用程序执行案例0中的说明,所以我在案例4的开头添加了一个日志,但我发现它被调用了,而案例0就是被调用的。我还尝试删除案例4中的所有代码,只需单击一次,如果在案

我有一个使用CustomAdapter的listView,listView项包含一个按钮,我在CustomAdapter中创建了一个OnClickListener,根据按钮的位置使用
开关(位置)处理按钮
除最后一个案例(即案例4)外,所有案例都运行良好,当我单击它时,OnClickListener调用案例0。我认为案例4的代码中有某种东西使应用程序执行案例0中的说明,所以我在案例4的开头添加了一个日志,但我发现它被调用了,而案例0就是被调用的。我还尝试删除案例4中的所有代码,只需单击一次,如果在案例0中再次单击,它就会起作用

如果有人知道如何解决这个问题,请帮忙,谢谢

这是我的CustomAdapter:

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    View row = convertView;
    MyViewHolder holder = null;
    if(row==null)
    {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = inflater.inflate(R.layout.listview_item, parent, false);
        holder = new MyViewHolder(row);
        row.setTag(holder);
        final SharedPreferences shared = context.getSharedPreferences("PrefName", Context.MODE_PRIVATE);
        final SharedPreferences.Editor editor = shared.edit();
        ........

        Button changeSet = (Button) row.findViewById(R.id.setBtn);
        changeSet.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                switch (position){
                    case 0:
                        Log.d("NOTHING", "Case 1 called");
                        editor.putBoolean("Clicked", true);
                        editor.putString("TheNumber", "1");
                        editor.apply();
                        Toast.makeText(context, "Set 1 selected please press the save button", Toast.LENGTH_SHORT).show();
                        break;

                   ...........

                    case 4:
                        Log.d("NOTHING", "Case 5 called");
                            Toast.makeText(context, "Set is Locked", Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        });
    }
    else
    {
        holder = (MyViewHolder) row.getTag();
    }

    holder.myImage.setImageResource(images[position]);
    holder.myText.setText(titleArray[position]);
    holder.myText2.setText(titleArray2[position]);


    return row;
}

每次都应该设置OnClickListener,如下所示:

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View row = convertView;
ViewHolder holder = null;
if(row==null){
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    row = inflater.inflate(R.layout.listview_item, parent, false);
    holder = new ViewHolder();
    holder.changeSetButton = (Button) row.findViewById(R.id.setBtn);
    holder.myImage =...;
    holder.myText2 = ...;
    row.setTag(holder);
} else {
    holder = (ViewHolder)row.getTag();
} 

final SharedPreferences shared = context.getSharedPreferences("PrefName", Context.MODE_PRIVATE);
final SharedPreferences.Editor editor = shared.edit();
........

holder.changeSetButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        switch (position){
            case 0:
                Log.d("NOTHING", "Case 1 called");
                editor.putBoolean("Clicked", true);
                editor.putString("TheNumber", "1");
                editor.apply();
                Toast.makeText(context, "Set 1 selected please press the save button", Toast.LENGTH_SHORT).show();
                break;

            ...........

            case 4:
            Log.d("NOTHING", "Case 5 called");
            Toast.makeText(context, "Set is Locked", Toast.LENGTH_SHORT).show();
            break;
        }
    }
});
//
holder.myImage.setImageResource(images[position]);
holder.myText.setText(titleArray[position]);
holder.myText2.setText(titleArray2[position]);

return row;
}

static class ViewHolder{
    Button changeSetButton;
    ImageView myImage;
    TextView myText2;
}

如果你用开关块发布按钮点击的代码,这很好。@user370305我添加了代码移动你的onClickListener。将onClickListener代码放在“holder.myImage.setImageResource(images[position]);”之前。定义
按钮更改集
与使用holder的其他视图相同。(在if-else语句之外)它将起作用。您的问题取决于列表行的循环视图。换句话说,您需要为每一行设置onclicklistener。现在,你只需要设置它一次。