3

我得到了我的 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 - 同样的效果。它的原因是什么?

4

3 回答 3

6

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

我尝试了您的代码并且正在调用 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();
        }                 
    });
于 2012-08-28T12:24:37.193 回答
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();
          }                 
    });
于 2012-08-28T13:10:14.483 回答
0

@Override public boolean areAllItemsEnabled() { return true ; //如果使用 ListAdapter 则返回 true }

@Override
public boolean isEnabled(int position) {
    return **true**;  //return True  if using ListAdapter
}
于 2016-12-23T07:51:56.483 回答