【问题标题】:setOnItemClickListener on Listview that extend activity扩展活动的 Listview 上的 setOnItemClickListener
【发布时间】:2011-12-05 07:27:17
【问题描述】:

更新:我找到了解决方案 删除

v.setFocusable(true); 代码中的v.setClickable(true);

并且只添加

v.setEnabled(true);

并在我的 xml (ListView) 中添加

android:drawSelectorOnTop="true" android:focusable="true"


当我点击它时,没有任何反应,甚至列表视图也没有焦点。

我已尝试添加所有这些:

           v.setClickable(true);
           v.setEnabled(true); 
           v.setFocusable(true);

只有这样我才能添加以下代码:

但这并不能确定点击的是什么项目

How to handle ListView click in Android

结果还是一样。

这是代码:

public class AppsInspectorActivity extends Activity {
     /** Called when the activity is first created. */
     @Override
        public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
//[...]
    ListView app_listView = (ListView)findViewById(R.id.listview);

// I try setOnItemClickListene here - 1
    app_listView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            Toast.makeText(getApplicationContext(), "I Clicked on Row " + position + ".", Toast.LENGTH_SHORT).show();

        }
    });
}

适配器

 public class AppAdapter extends BaseAdapter {

            Context context;
            ArrayList<AppInfo> dataList=new ArrayList<AppInfo>();
            public AppAdapter(Context context,ArrayList<AppInfo> inputDataList)
            {

                this.context = context;
                dataList.clear();
                for(int i=0;i<inputDataList.size();i++)
                {
                    dataList.add(inputDataList.get(i));
                }
            }
            public int getCount() {
                // TODO Auto-generated method stub
                return dataList.size();
            }

            public Object getItem(int position) {
                // TODO Auto-generated method stub
                return dataList.get(position);
            }

            public long getItemId(int position) {
                // TODO Auto-generated method stub
                return position;
            }

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

                View v=convertView;
                final AppInfo appUnit = dataList.get(position);

                ListView app_listView = (ListView)findViewById(R.id.listview);

                /** Remove this , i just try to add to see setOnItemClickListener will work at here or not **/
                 app_listView.setOnItemClickListener(new OnItemClickListener() {
                    public void onItemClick(AdapterView<?> parent, View view,
                      int position, long id) {
                    Toast.makeText(getApplicationContext(), "I Clicked on Row " + position + ".", Toast.LENGTH_SHORT).show();
                  }
                });

                if(v==null)
                {
                    LayoutInflater vi=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    v=vi.inflate(R.layout.app_row, null);
                    v.setClickable(true);
                    v.setEnabled(true); 
                    v.setFocusable(true);           
                }


                TextView appName=(TextView)v.findViewById(R.id.appName);
                ImageView appIcon=(ImageView)v.findViewById(R.id.AppIcon);

                if(appName!=null)
                    appName.setText(appUnit.appName);
                if(appIcon!=null)
                    appIcon.setImageDrawable(appUnit.appIcon);
                return v;
            }
         }
 }
}

【问题讨论】:

  • 您能在列表视图中看到任何列表项吗?
  • 是的,我可以看到,但是无法对焦和点击

标签: java android listview


【解决方案1】:

您能否发布main.xml 布局。在我看来,您在列表视图之上还有另一个视图正在消耗触摸事件。

【讨论】:

    【解决方案2】:

    我通过删除找到了解决方案

    v.setFocusable(true); v.setClickable(true); in the code

    并且只添加

    v.setEnabled(true);

    并在我的 xml (ListView) 中添加

    android:drawSelectorOnTop="true" android:focusable="true"

    【讨论】:

      【解决方案3】:

      你好,去掉Adapter的getView中的setOnItemClickListener。参考这个listView

      【讨论】:

        【解决方案4】:

        使用AppsInspectorActivity.this 而不是getApplicationContext()

          public class AppsInspectorActivity extends Activity {
             /** Called when the activity is first created. */
             @Override
                public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        //[...]
            ListView app_listView = (ListView)findViewById(R.id.listview);
        
        // I try setOnItemClickListene here - 1
            app_listView.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    Toast.makeText(AppsInspectorActivity.this, "I Clicked on Row " + position + ".", Toast.LENGTH_SHORT).show();
        
                }
            });
        }
        

        并从适配器中的getView() 方法中删除setOnItemClickListener

        【讨论】:

        • 即使将 setOnItemClickListener 移至 onCreate,结果仍然相同
        【解决方案5】:

        将您的getView() 更改为低于 1 并判断它是否有效

        public View getView(int position, View convertView, ViewGroup parent) {
        
                    View v=convertView;
                    final AppInfo appUnit = dataList.get(position);
                    if(v==null)
                    {
                        LayoutInflater vi=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        v=vi.inflate(R.layout.app_row, null);
                        v.setClickable(true);
                        v.setEnabled(true); 
                        v.setFocusable(true);           
                    }
        
        
                    TextView appName=(TextView)v.findViewById(R.id.appName);
                    ImageView appIcon=(ImageView)v.findViewById(R.id.AppIcon);
        
                    if(appName!=null)
                        appName.setText(appUnit.appName);
                    if(appIcon!=null)
                        appIcon.setImageDrawable(appUnit.appIcon);
                    return v;
                }
        

        【讨论】:

          【解决方案6】:

          在设置它的 onItemClick 之前,您必须将适配器设置为 listview。这里您只是获取 listview 但没有项目。所以当您单击 listview 时,它的 onItemClick 永远不会被调用。

          【讨论】:

          • 但我确实得到了包含项目的列表视图
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-06-10
          • 1970-01-01
          • 2015-02-11
          • 1970-01-01
          • 1970-01-01
          • 2011-07-07
          相关资源
          最近更新 更多