onListItemClick 不会(总是)被 ListActivity 调用

Posted

技术标签:

【中文标题】onListItemClick 不会(总是)被 ListActivity 调用【英文标题】:onListItemClick does not (always) gets called with ListActivity 【发布时间】:2011-08-20 01:39:43 【问题描述】:

我使用 ListActivity 来显示从 xml 布局文件扩展而来的视图。当我最初在列表中显示此视图时,我通过将目标视图的可见属性设置为 View.GONE 来隐藏视图的一部分。在 onListItemClick 方法中,我将这个“隐藏”视图的可见性设置为 View.GONE,如果它可见的话。在下一次单击时,我想再次隐藏视图。为此,我检测视图的可见性,如果是 View.VISIBLE,则将其更改为 View.GONE。

我的代码执行方法 onListItemClick,当隐藏视图的可见性 os View.GONE 并在单击时正确显示隐藏视图。但是,当视图的可见性设置为 View.VISIBLE 时,它不会执行 onListItemClick 方法。

我知道这种情况很适合使用 ExpandableListActivity,但由于其他无法解决的问题,我无法使用它!

这是(部分相关的)代码:

public class MyListActivity extends ListActivity implements OnClickListener 
// images that depict whether part of the view is visible or not
private Drawable imgUp, imgDown;

    private class MyOrderAdapter extends ArrayAdapter<Order> 

    @Override
    public View getView(int position, View convertView, ViewGroup parent) 
    View v = convertView;
            if (v == null) 
        LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        // infalte this view from xml
        v = vi.inflate(R.layout.brief_order, null);

        // display down arrow key depicting that more is available to be
        // displayed when a user clicks on it.
        ImageView arrow = (ImageView) v.findViewById(R.id.imgArrow);

        // get a reference to the table layout for details
        // which should not be displayed initially
        TableLayout tb = (TableLayout) v.findViewById(R.id.view_detail);

        // DO NOT DISPLAY PART OF THE VIEW INITIALLY    
        tb.setVisibility(View.GONE);
    

    // code to initialize the text filed values in the view v
    return v;
    


    // onListItemClick
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) 
        super.onListItemClick(l, v, position, id);

        Log.d("MyList", "item click called");

        // RETRIEVE THE detail view
        TableLayout tb = (TableLayout) v.findViewById(R.id.view_detail);
    if(tb.getVisibility() == View.GONE)  
        tb.setVisibility(View.VISIBLE);
        img.setImageDrawable(imgUp);
    
    else 
        img.setImageDrawable(imgDown);
        tb.setVisibility(View.GONE);
    


// rest of the code

谢谢。

干杯

【问题讨论】:

【参考方案1】:

但以防万一,您必须将ListView 中的图像和其他项目设置为不是focusable,然后将调用onListItemClick 方法。

【讨论】:

以上是关于onListItemClick 不会(总是)被 ListActivity 调用的主要内容,如果未能解决你的问题,请参考以下文章

ListFragment.onListItemClick() 未被调用;可能是由于导航抽屉

ListFragment OnListItemClick 未被调用

我无法从 ListFragment 内的 onListItemClick 开始新活动

Android -- 使用自定义列表视图时如何使用 onlistitemclick() 函数

从onListItemClick获取解析对象ID

使用自定义适配器绕过 ListView 的 onListItemClick()