Android ListView 没有响应

Posted

技术标签:

【中文标题】Android ListView 没有响应【英文标题】:Android ListView does not respond 【发布时间】:2015-06-06 00:47:33 【问题描述】:

我对 ListView 和 Adapter 有疑问。 ListView setOnItemClickListener 和 setOnItemLongClickListener 没有响应,但 onScroll 工作正常。这是代码,你可能有我的解决方案......

提前致谢。

public class AFragment extends Fragment 

View rootView;
ListView l;
public static AArrayAdapter adapter;

public AFragment() 


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    rootView = inflater.inflate(R.layout.fragment_list, container, false);
    return rootView;


@Override
public void onViewCreated(View view, Bundle savedInstanceState)
    l = (ListView) rootView.findViewById(R.id.listView);

    adapter = new AArrayAdapter(getActivity(), R.layout.list_item_adapter, new ArrayList<AString>());
    l.setAdapter(adapter);

    l.setOnItemLongClickListener(new OnItemLongClickListener() 
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) 
            //Toast doesn't work
            return true;
        
    );

    aList();

    l.setOnScrollListener(new OnScrollListener() 
        private int mLastFirstVisibleItem;

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) 
            //
        
        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) 
            if (mLastFirstVisibleItem < firstVisibleItem) 
                // working
            
            if (mLastFirstVisibleItem > firstVisibleItem) 
                // working
            
            mLastFirstVisibleItem = firstVisibleItem;
        
    );

   l.setOnItemClickListener(new OnItemClickListener() 
         @Override
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
             //Toast doesn't work
         
     );


public void aList()
    ...


/***/

public class AArrayAdapter extends ArrayAdapter<AString> 
    private final Context context;
    private List<AString> items;

    public AArrayAdapter(Context context, int layoutResourceId, List<AString> items) 
        super(context, layoutResourceId, items);
        this.context = context;
        this.items = items;
    

    @Override
    public View getView(final int position, View convertView, final ViewGroup parent) 
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        final View rowView = inflater.inflate(R.layout.list_item_adapter, parent, false);

        AHolder holder = null;
        holder = new AHolder();
        holder.acc = items.get(position);
        holder.id = (TextView) rowView.findViewById(R.id.idLine);
        holder.name = (TextView) rowView.findViewById(R.id.firstLine);
        holder.value = (TextView) rowView.findViewById(R.id.secondLine);

        rowView.setTag(holder);

        setupItem(holder);

        final TextView tvId = (TextView) rowView.findViewById(R.id.idLine);
        final ImageButton imageButton = (ImageButton) rowView.findViewById(R.id.icon);

        return rowView;
    

    private void setupItem(AccHolder holder) 
        holder.name.setText(holder.acc.getName());
        holder.value.setText(holder.acc.getValue());
        holder.id.setText(String.valueOf(holder.acc.getId()));
        holder.removeButton = (ImageButton) rowView.findViewById(R.id.icon);
        holder.removeButton.setTag(holder.account);

        holder.removeButton.setFocusable(false); // <=========== :)
    

    public class AHolder 
        AString account;
        TextView id;
        TextView name;
        TextView value;
    


【问题讨论】:

您在监听器方法中没有任何代码,您是否尝试至少显示吐司? 这正是我尝试过的。 检查您的列表视图项 xml 是否有任何可聚焦元素 - ***.com/questions/8955270/… 好的。我解决了它,但它不是 xml 的问题。它有ImageButton 我需要在代码中setFocusable(false) 【参考方案1】:

这可能与 - ListView items are not clickable. why? 重复

要解决此问题,您必须在 ListView/GridView 中没有任何可聚焦的项目。

所以对于 Buttons/ImageButtons 你必须设置:

android:focusable="false" 

如果您在 ListView/GridView 中有一个 ImageButton,您可以将其切换为 ImageView,因为该按钮无论如何都无法点击,这样您就不需要更改可聚焦性。

也如链接中所述的 fpr0001 所述,您也可以这样做:

这个答案对我有用:https://***.com/a/16536355/5112161

主要是他在LinearLayout或RelativeLayout中添加了以下内容:

android:descendantFocusability="blocksDescendants"

您还需要从所有 xml 中删除以下内容:

android:focusable="false"
android:focusable="true"
android:clickable="true"
android:clickable="false"

【讨论】:

【参考方案2】:

如果您的行中有可点击的视图、按钮或复选框,最好使用Recyclerview。那将是更好的选择。您可以找到 Recyclerview here 的基本实现。

按钮或复选框单击侦听器会干扰列表视图单击侦听器。在行的根元素中 添加android:descendantFocusability="beforeDescendants"android:descendantFocusability="blocksDescendants"之一 还可以尝试为按钮添加android:focusable="false"

这应该可以解决问题。

【讨论】:

以上是关于Android ListView 没有响应的主要内容,如果未能解决你的问题,请参考以下文章

ListView OnItemClickListener 没有响应?

jsonArray请求没有响应[关闭]

Android 之 ListView 点击响应代码?

Android ListView滑动删除及响应事件详解

Android自定义ListView的Item无法响应OnItemClick的解决办法

Android listview添加OnItemClickListener事件点击无响应,求高手指导!感激!