ListView上的setOnItemClickListener不会触发

时间:2012-08-28 12:16:47

标签: android listview actionlistener onclicklistener onitemclicklistener

我得到SD卡的文件列表并将其显示在listView中,就像在自定义适配器的帮助下一样:

adapter = new ArrayAdapter<Item>(this,
            R.layout.file_manager, R.id.checkedTextItem,
            fileList) 
            {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // creates view
            LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View view = inflater.inflate(R.layout.check_item, null);

            CheckedTextView textView = (CheckedTextView) view
                    .findViewById(R.id.checkedTextItem);

            // put the image on the text view
            textView.setCompoundDrawablesWithIntrinsicBounds(
                    fileList[position].icon, 0, 0, 0);

            textView.setTextColor(Color.WHITE);
            textView.setText(fileList[position].file);
            if(fileList[position].icon == R.drawable.directory_icon)
                textView.setCheckMarkDrawable(null);


            // add margin between image and text (support various screen
            // densities)
            int dp5 = (int) (5 * getResources().getDisplayMetrics().density + 0.5f);
            textView.setCompoundDrawablePadding(dp5);

            return view;

        }
    };

我想实现setonitemclicklistener或类似的东西来监听检测项目点击事件。我在Activity中的onCreate()方法:

    public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
     setContentView(R.layout.file_manager);
    lv = (ListView)findViewById(R.id.fileManagerList);
    loadFileList();
    file_list = findViewById(R.id.filesList);
    lv.setAdapter(adapter);

    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
          public void onItemClick(AdapterView<?> myAdapter, View myView, int myItemInt, long mylng) {
            //String selectedFromList = (lv.getItemAtPosition(myItemInt).toString());
            Toast toast = Toast.makeText(getApplicationContext(), "Hello world!", Toast.LENGTH_LONG);
            toast.show();
          }                 
    });

}

我的活动xml:

  <?xml version="1.0" encoding="UTF-8"?>

 <RelativeLayout

              xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/fileManager"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:orientation="vertical"
               >
    <ListView

        android:background="#000000"
        android:focusable="false"
        android:id="@+id/fileManagerList"
        android:layout_width="fill_parent" 
         android:layout_above="@+id/closecalmlayout"      
        android:layout_height="wrap_content" >
    </ListView>


         <LinearLayout
            android:id="@+id/closecalmlayout"
            android:layout_alignParentBottom="true"
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"
            android:weightSum="1.0" >

              <Button
                  android:id="@+id/btnOk"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent" 
                  android:layout_marginLeft="5dip"
                  android:layout_marginTop="5dip"
                  android:layout_weight=".50"
                  android:text="Attach files"
                  />

              <Button
                  android:id="@+id/btnCancel"
                    android:layout_width="fill_parent"
                  android:layout_height="fill_parent" 
                  android:layout_marginLeft="5dip"
                  android:layout_marginRight="5dip"
                  android:layout_marginTop="5dip"
                  android:layout_weight=".50"
                  android:text="Do not attach"
                   />

            </LinearLayout>
</RelativeLayout>

我的CheckedTextView活动

   <?xml version="1.0" encoding="UTF-8"?>
    <LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp">

      <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
             android:id="@+id/checkedTextItem" 
             android:layout_width="fill_parent" 
             android:layout_height="wrap_content" 
             android:gravity="center_vertical" 
             android:checkMark="?android:attr/listChoiceIndicatorMultiple"
             android:textColor="#000000"
             android:focusable="false"
             android:paddingLeft="10dip" 
             android:paddingRight="6dip" 
             android:typeface="sans" android:textSize="16dip"/> 

</LinearLayout>

但是当我点击项目时,没有任何反应。我试图在onResume()方法中创建setOnItemClickListener,但效果相同。我也试过onclicklistener - 效果一样。这是什么原因?

3 个答案:

答案 0 :(得分:6)

在我看来,某些视图正在从列表视图中获得焦点,当您知道它是哪个视图时,在xml中的该视图上使用android:focusable="false",它应该可以解决问题。

我尝试了你的代码并且正在调用onItemClicked,这是我的getView():

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if(view == null){
            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = vi.inflate(R.layout.row, null);
        }

        CheckedTextView textView = (CheckedTextView) view.findViewById(R.id.checked);
        textView.setText("Hello"); //test, you can do whatever you want with this

        int dp5 = (int) (5 * getResources().getDisplayMetrics().density + 0.5f);
        textView.setCompoundDrawablePadding(dp5);

        return view;
    }

我如何设置适配器(MyAdapter):

MyAdapter adapter = new MyAdapter(this, 0, arrayList);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {

        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
            // TODO Auto-generated method stub
            Toast.makeText(PlayingAroundActivity.this, "Hello", Toast.LENGTH_LONG).show();
        }                 
    });

答案 1 :(得分:0)

  

从列表视图中获取所选项目。

 lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
          public void onItemClick(AdapterView<?> myAdapter, View myView, int myItemInt, long mylng) {
            //String selectedFromList = (lv.getItemAtPosition(myItemInt).toString());
            Toast toast = Toast.makeText(getApplicationContext(), "Hello world!"+fileList(myItemInt), Toast.LENGTH_LONG);
            toast.show();
          }                 
    });

答案 2 :(得分:0)

@覆盖     public boolean areAllItemsEnabled(){         返回 true ; //如果使用ListAdapter,则返回true     }

@Override
public boolean isEnabled(int position) {
    return **true**;  //return True  if using ListAdapter
}