【问题标题】:onListItemClick is not getting called on ListActivity未在 ListActivity 上调用 onListItemClick
【发布时间】:2013-01-17 06:46:01
【问题描述】:

我有一个小型应用程序,我正在尝试使用 ListActivity 显示 youtube 缩略图列表

public class ResultListActivity extends ListActivity {
.....

......
@Override
    protected void onCreate(Bundle savedInstanceState) {

loadData();


---
---

}


private void loadData(final String searchQuery) {
        AsyncTask<Object, Void, List<YouTubeVideos>> asyncTask = new AsyncTask<Object, Void, List<YouTubeVideos>>() {

.....

}

/** {@inheritDoc} */
    @Override  
    protected void onListItemClick(ListView l, View v, int pos, long id) {  
        super.onListItemClick(l, v, pos, id);

        Log.d("test","Inside onListItemClick");

}

xml 看起来像这样

<ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" >
    </ListView>



   <ImageView
    android:id="@+id/imageView1" 
    android:layout_height="wrap_content"
    android:layout_width="100dp" 
    android:focusable="false"
    android:focusableInTouchMode="false"
    >
</ImageView>

适配器:

public class ResultViewAdapter extends BaseAdapter {

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

ImageView imageView = (ImageView) row.findViewById(R.id.imageView1);

        imageView.setImageDrawable(torvideo.getDrawable());





        return row;
}

...

}

我无法调用 onListItemClick。如果我犯了任何错误,请告诉我吗?

1/17 更新

当我点击时没有任何反应,但我在日志中看到这些

01-18 04:09:32.030:W/Trace(973):来自 nativeGetEnabledTags 的意外值:0

【问题讨论】:

  • 似乎是因为您在列表中有一个 ImageView。尝试将其更改为普通 textView 并检查是否正在处理事件?
  • 不,即使是 textView 也不会被调用

标签: android android-imageview listactivity


【解决方案1】:

在我的ListView 中,我有一个可点击的TextView 和一个可点击的ImageViewonListItemClick 对我不起作用,因为我在列表行中有多个可点击项目。所以我所做的是我在我的getView() 中为适配器实现了onClickListener。这是我的代码:

public class SimpleArrayAdapter extends ArrayAdapter<String>{

private LayoutInflater mInflater;
private String[] mStrings;
private TypedArray mIcons;
private int mViewResourceId;

public SimpleArrayAdapter(Context context, int textViewResourceId, String[] names, TypedArray icons) {
    super(context, textViewResourceId, names);
    // TODO Auto-generated constructor stub

    mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    mStrings = names;
    mIcons = icons;
    mViewResourceId = textViewResourceId;
}


public int getCount(){
    return mStrings.length;
}

public View getView(final int position, View convertView, ViewGroup parent){
    convertView = mInflater.inflate(mViewResourceId, null);

    ImageView iv = (ImageView)convertView.findViewById(R.id.option_icon);
    iv.setImageDrawable(mIcons.getDrawable(position));
    iv.setTag("colorChooserClicked");

    iv.setOnClickListener( new OnClickListener() {
        int pos = position;
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Log.v("text", "Image clicked, row %d"+pos);

        }
    });
    TextView tv = (TextView)convertView.findViewById(R.id.textview01);
    tv.setText(mStrings[position]);
    tv.setTag("textViewClicked");
    tv.setOnClickListener(new OnClickListener() {
        int textpos = position;
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Log.v("text", "Title clicked  %s"+mStrings[textpos]);
        }
    });
    return convertView;

}

}

发生这种情况是因为我们有多个可点击项目,并且我们正在尝试使用 ListActivity。否则,另一种选择是为您的 MainActivity 扩展 Activity 类,然后执行此操作。

【讨论】:

    【解决方案2】:

    对于 ListActivity,调用 setOnItemClickListener 很简单

    对应的代码如下

    list.setOnItemClickListener(new OnItemClickListener() {
    
    public void onItemClick(AdapterView<?> arg0,
                        View arg1, int position, long arg3)
    {
       System.out.println("LIST ITEM POSITION "+position);
    }
    });
    

    【讨论】:

    • 在我的 ResultListActivity load() 方法之后添加了这个。仍然没有运气:(
    【解决方案3】:

    baseadapter 的 imageview xml 添加这一行

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

    【讨论】:

    • 添加了这个,但仍然没有运气
    【解决方案4】:
    ListView lv = getListView();
     lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> arg0, View view, int arg2,
                            long arg3) {
                         Log.d("test","Inside onListItemClick");
                    }
                });
    

    【讨论】:

      【解决方案5】:

      您需要在 ResultViewAdapter 中为 getView() 添加 row.setOnClickListener(new OnItemClickListener(position));

      【讨论】:

      • OnItemClickListener 无法解析为类型。编译错误
      【解决方案6】:

      如果您有一个名为 ListActivity 的类,请确保您从正确的 listActivity 扩展,因为在扩展时,您的 ListActivity 类和超类 ListActivity 都会显示

      【讨论】:

        猜你喜欢
        • 2015-02-13
        • 1970-01-01
        • 1970-01-01
        • 2011-06-28
        • 1970-01-01
        • 1970-01-01
        • 2011-09-23
        • 1970-01-01
        相关资源
        最近更新 更多