Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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 仅可单击listview android中5个textview中的4个textview_Java_Android_Listview_Android Listview - Fatal编程技术网

Java 仅可单击listview android中5个textview中的4个textview

Java 仅可单击listview android中5个textview中的4个textview,java,android,listview,android-listview,Java,Android,Listview,Android Listview,在我提问之前,我已经搜索并找到了答案,请使用以下方法: long viewId = view.getId(); 但当我在代码中使用它时,仍然是单击整个listview行,而不是单击我要单击的textview。下面是实现该答案后的代码: listView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView <? > parent, View view, i

在我提问之前,我已经搜索并找到了答案,请使用以下方法:

long viewId = view.getId();
但当我在代码中使用它时,仍然是单击整个listview行,而不是单击我要单击的textview。下面是实现该答案后的代码:

listView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView <? > parent, View view, int position, long id) {
        long viewId = view.getId();
        if (viewId == R.id.masterclass_name) {
            Toast.makeText(getApplicationContext(), "masterclass_name clicked", Toast.LENGTH_SHORT).show();
            final Dialog dialog = new Dialog(context);
            dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
            dialog.setContentView(R.layout.dialog_popup_pesan_kelas);
            pesan_kelas = (TextView) dialog.findViewById(R.id.pesan_kelas);
            sukses = (TextView) dialog.findViewById(R.id.sukses);
            studio_name = (TextView) dialog.findViewById(R.id.studio_name);
            mohon_hadir = (TextView) dialog.findViewById(R.id.mohon_hadir);
            booking_number = (TextView) dialog.findViewById(R.id.booking_number);
            indentitas_resmi = (TextView) dialog.findViewById(R.id.indentitas_resmi);
            bookbutton = (Button) dialog.findViewById(R.id.bookbutton);
            selesaibutton = (Button) dialog.findViewById(R.id.selesaibutton);
            bookbutton.setOnClickListener(new View.OnClickListener() {@Override
                public void onClick(View v) {
                    pesan_kelas.setVisibility(View.GONE);
                    sukses.setVisibility(View.VISIBLE);
                    bookbutton.setVisibility(View.GONE);
                    selesaibutton.setVisibility(View.VISIBLE);
                    mohon_hadir.setVisibility(View.VISIBLE);
                    booking_number.setVisibility(View.VISIBLE);
                    indentitas_resmi.setVisibility(View.VISIBLE);
                }
            });
            selesaibutton.setOnClickListener(new View.OnClickListener() {@Override
                public void onClick(View v) {
                    dialog.dismiss();
                }
            });
            closedialog = (ImageView) dialog.findViewById(R.id.closeDialog);
            closedialog.setOnClickListener(new View.OnClickListener() {@Override
                public void onClick(View v) {
                    dialog.dismiss();
                }
            });
            studio_name.setOnClickListener(new View.OnClickListener() {@Override
                public void onClick(View v) {
                    Intent intent = new Intent(context, StudioDetail.class);
                    startActivity(intent);
                }
            });
            dialog.show();
        } else if (viewId == R.id.studio_nama) {
            Toast.makeText(getApplicationContext(), "studio_nama clicked", Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(context, StudioDetail.class);
            startActivity(intent);
        } else if (viewId == R.id.trainer_name) {
            Toast.makeText(getApplicationContext(), "trainer_name clicked", Toast.LENGTH_SHORT).show();
        } else if (viewId == R.id.area) {
            Toast.makeText(getApplicationContext(), "area clicked", Toast.LENGTH_SHORT).show();
        } else {
            CariKelasAdapter carikelas = (CariKelasAdapter) parent.getItemAtPosition(position);
            Toast.makeText(getApplicationContext(), carikelas.getMasterclass_name(), Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(context, checkin.class);
            startActivity(intent);
        }
    }
});

我认为你根本不应该使用Setonic。用于在ListView中单击整个项目

您应该为4个TextView创建4个OnClickListener,并在适配器的getView()中,使用setOnClickListener将4个TextView链接到这些OnClickListener

通常,您应该将项目位置设置为每个textview的标记,以便在OnClickListener中,您可以知道view.getTag()单击的是哪个项目

例如:

public class MyAdapter extends BaseAdapter {
    private MyActivity mActivity

    public MyAdapter(MyActivity activity) {
        mActivity = activity;
    }

    View.OnClickListener listener1 = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int position = (int)v.getTag();
            // do stuff based on position or kelasList.get(position)
            // you can call mActivity.startActivity() if you need
        }
    };
    // similar for listener2,3,4

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // convert view = design
        View v = convertView;
        if (v == null) {
            holder = new ViewHolder();
            v = vi.inflate(Resource, null);
            holder.image_carikelas = (ImageView) v.findViewById(R.id.image_carikelas);
            holder.masterclass_name = (TextView) v.findViewById(R.id.masterclass_name);
            holder.studio_nama = (TextView) v.findViewById(R.id.studio_nama);
            holder.trainer_name = (TextView) v.findViewById(R.id.trainer_name);
            holder.area = (TextView) v.findViewById(R.id.area);
            holder.facility = (TextView) v.findViewById(R.id.facility);

            // set OnClickListeners
            holder.studio_nama.setOnClickListener(listener1);
            holder.trainer_name.setOnClickListener(listener2);
            holder.area.setOnClickListener(listener3);
            holder.facility.setOnClickListener(listener4);
            v.setTag(holder);
        } else {
            holder = (ViewHolder) v.getTag();
        }
        //holder.imageview.setImageResource(R.drawable.promo_1);
        new DownloadImageTask(holder.image_carikelas).execute(kelasList.get(position).getImage());
        holder.masterclass_name.setText(kelasList.get(position).getName());
        holder.studio_nama.setText(kelasList.get(position).getStudio_nama());
        holder.trainer_name.setText("Trainer: " + kelasList.get(position).getTrainer_name());
        holder.area.setText("Area: " + kelasList.get(position).getArea());
        holder.facility.setText("Facility: " + kelasList.get(position).getFacility());

        // set tags
        holder.studio_nama.setTag(position);
        holder.trainer_name.setTag(position);
        holder.area.setTag(position);
        holder.facility.setTag(position);
        return v;

    }
}

我认为你根本不应该使用Setonic。用于在ListView中单击整个项目

您应该为4个TextView创建4个OnClickListener,并在适配器的getView()中,使用setOnClickListener将4个TextView链接到这些OnClickListener

通常,您应该将项目位置设置为每个textview的标记,以便在OnClickListener中,您可以知道view.getTag()单击的是哪个项目

例如:

public class MyAdapter extends BaseAdapter {
    private MyActivity mActivity

    public MyAdapter(MyActivity activity) {
        mActivity = activity;
    }

    View.OnClickListener listener1 = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int position = (int)v.getTag();
            // do stuff based on position or kelasList.get(position)
            // you can call mActivity.startActivity() if you need
        }
    };
    // similar for listener2,3,4

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // convert view = design
        View v = convertView;
        if (v == null) {
            holder = new ViewHolder();
            v = vi.inflate(Resource, null);
            holder.image_carikelas = (ImageView) v.findViewById(R.id.image_carikelas);
            holder.masterclass_name = (TextView) v.findViewById(R.id.masterclass_name);
            holder.studio_nama = (TextView) v.findViewById(R.id.studio_nama);
            holder.trainer_name = (TextView) v.findViewById(R.id.trainer_name);
            holder.area = (TextView) v.findViewById(R.id.area);
            holder.facility = (TextView) v.findViewById(R.id.facility);

            // set OnClickListeners
            holder.studio_nama.setOnClickListener(listener1);
            holder.trainer_name.setOnClickListener(listener2);
            holder.area.setOnClickListener(listener3);
            holder.facility.setOnClickListener(listener4);
            v.setTag(holder);
        } else {
            holder = (ViewHolder) v.getTag();
        }
        //holder.imageview.setImageResource(R.drawable.promo_1);
        new DownloadImageTask(holder.image_carikelas).execute(kelasList.get(position).getImage());
        holder.masterclass_name.setText(kelasList.get(position).getName());
        holder.studio_nama.setText(kelasList.get(position).getStudio_nama());
        holder.trainer_name.setText("Trainer: " + kelasList.get(position).getTrainer_name());
        holder.area.setText("Area: " + kelasList.get(position).getArea());
        holder.facility.setText("Facility: " + kelasList.get(position).getFacility());

        // set tags
        holder.studio_nama.setTag(position);
        holder.trainer_name.setTag(position);
        holder.area.setTag(position);
        holder.facility.setTag(position);
        return v;

    }
}

那么setOnItemClickListener(在listview上)更改为?如果我将setOnClickListener放在适配器的getView()上,如何将其重定向到另一个活动或显示对话框?您可以将该活动作为适配器构造函数的参数传入,然后在需要适配器中的上下文时使用它。由于我不理解,您是否可以将其显示为代码。无法解析方法setOnClickListener(android.view.view.onclicklistener)在holder.studio_nama.setOnClickListener(listener1)上;很抱歉,这些都是打字错误,应该是.setOnClickListener,而不是.setOnClickListener在适配器中,如何将其重定向到另一个活动或显示对话框?您可以将该活动作为适配器构造函数的参数传入,然后在需要适配器中的上下文时使用它。是否可以将其显示为代码,因为我不懂。无法解析方法setonclicklistener(android.view.view.onclicklistener)在holder.studio_nama.setOnCickListener(listener1)上;很抱歉,这些都是打字错误,应该是.setOnClickListener,而不是.setOnCickListener。修复了它。