【问题标题】:Android listview baseadapter and setOnItemClickListener cannot function in same timeAndroid listview baseadapter 和 setOnItemClickListener 不能同时工作
【发布时间】:2017-03-09 09:05:34
【问题描述】:

当我单击列表视图中的项目时,我设法做到了,列旁边会在那里显示一个勾号,但是现在我有一个问题,当我单击我的项目时,勾号会显示,但我的没有功能onitemclicklistener 事件。如何让这两个功能同时工作。对不起我的英语,希望能理解

这是我的 setOnItemClickListener 事件

 condimentlist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
      @Override
  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
     TextView condimentitem =(TextView)view.findViewById(R.id.condcb);
     String citem= condimentitem.getText().toString();

     ArrayList<String> data = new ArrayList<String>();
     data.add(citem);

     String array[] = data.toArray(new String[0]);
    for (int j = 0; j < array.length; j++) {
    remark.append(String.valueOf(array[j]));
                      }
 ------condimentitem.setOnClickListener(new View.OnClickListener()-------
        {
            @Override
            public void onClick(View v)
            {
                int visibility = btntick.getVisibility();
                if(visibility == View.VISIBLE)
                {
                    btntick.setVisibility(View.GONE);
                }
                else
                {
                    btntick.setVisibility(View.VISIBLE);
                }
            }
        });

               }
 });

这是我用来扭曲刻度的基本适配器

 public class condimentlist extends BaseAdapter {

    LayoutInflater mInflater;

    private ArrayList<Integer> positions = new ArrayList<Integer>();

    public ArrayList<Integer> getPositions() {
        return positions;
    }

    public condimentlist() {
        mInflater = LayoutInflater.from(getActivity());
    }

    @Override
    public int getCount() {
        return CondimentList.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

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

        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.condimentlistview_details, null);
        }
        condcb = (TextView) convertView.findViewById(R.id.condcb);
        final TextView tremark = (TextView) convertView.findViewById(R.id.Tremark);
        btntick = (ImageView) convertView.findViewById(R.id.iv_tick);

    Condiment myObj = CondimentList.get(position);
    condcb.setText("" + myObj.getCondimentName());


 -----------convertView.performClick ();------------------
        return convertView;
    }

condimentlistview_details.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">


    <TextView
        android:id="@+id/condcb"
        android:text="Press"
        android:layout_width="150dp"
        android:layout_height="30dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:textSize="18sp" />

    <ImageButton
        android:layout_width="15dp"
        android:layout_height="15dp"
        android:background="@drawable/tick"
        android:id="@+id/iv_tick"
        android:visibility="gone"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginLeft="150dp"
        android:layout_marginStart="150dp" />

</RelativeLayout>

【问题讨论】:

  • 能否分享您的condimentlistview_details 布局文件。
  • 因为你的TextView之类的condcb跟condimentlist.setOnItemClickListener有冲突
  • 也许,您可以在刻度上设置 setOnClickListener:int btntickbtntick.setOnClickListener(new View.OnClickListener()
  • 您要执行什么操作,以便在单击菜单项时切换可见/消失?
  • @kggoh 不,当我单击列表视图项目时,列旁边的勾号

标签: android listview baseadapter onitemclicklistener


【解决方案1】:

我认为问题是 ImageButton 在您的 listview Row xml 文件中。

输入 android:focusable="false" ,看看效果如何!!!

<ImageButton
    android:layout_width="15dp"
    android:layout_height="15dp"
    android:background="@drawable/tick"
    android:id="@+id/iv_tick"
    android:visibility="gone"
    android:focusable="false"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginLeft="150dp"
    android:layout_marginStart="150dp" />

【讨论】:

    【解决方案2】:

    以下是我之前回答的问题之一,您可能需要创建一个列表,其中一个布尔元素作为标志。当您选择时,您将该标志变为真。希望对您有所帮助。

    enter link description here

    【讨论】:

      【解决方案3】:

      您可以在您的活动类中定义static ArrayList,然后使用哈希映射从基本适配器中的该数组列表中检索所有内容。然后,您可以在活动类中使用SetOnItemClickListener,通过引用活动的数组列表的位置来获取每行的正确值。

      完美地为我工作。如果您需要示例代码,请告诉我。

      【讨论】:

        【解决方案4】:

        BASE ADAPTER's getView()

        中编写此代码
        condimentitem.setOnClickListener(new View.OnClickListener()-------
                {
                    @Override
                    public void onClick(View v)
                    {
                        int visibility = btntick.getVisibility();
                        if(visibility == View.VISIBLE)
                        {
                            btntick.setVisibility(View.GONE);
                        }
                        else
                        {
                            btntick.setVisibility(View.VISIBLE);
                        }
                    }
                });
        

        【讨论】:

          【解决方案5】:

          在适配器的condcb.OnClick 方法中添加convertView.performClick()

          【讨论】:

          • 谢谢,它不起作用,我仍然得到相同的结果
          • 把你的逻辑放在一个地方,无论哪个被调用。
          • 我将我的逻辑合并到我的 onitemclicklistener 中,但是这两个功能都无法工作,我编辑了我的问题代码,我的方式是否正确?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-07
          • 1970-01-01
          相关资源
          最近更新 更多