onListItemClick无法在我的自定义ListActivity中工作

时间:2016-08-18 22:13:47

标签: android listview android-adapter listadapter

我是Android开发的新手。我现在正在了解它。这不是我做过的第一个练习应用程序,它是前几个应用程序之一。

此应用程序的目标是:屏幕应显示项目列表。每个项目应显示SD卡上特定文件夹中的图像缩略图和文件名。单击该行应将该图像打开为全屏。

我将项目显示在列表中,但这些项目不响应任何点击。我的onListItemClick()没有被调用。当我点击一行时,logcat中没有任何内容出现。

我自己尝试过很多东西而无法让它发挥作用。当我了解到这一点时,我看到了一个例子。

我还在SO上阅读了有关它的内容并阅读了教程。例如,我确实在SO上看到了类似的问题。一个答案是将其添加到Textview:

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

所以我尝试将它添加到我的TextView和ImageView中,但仍然没有运气。

感谢任何帮助,这真的令人沮丧。

下面是最初的活动:

public class MainActivity extends ListActivity {

    private PictureListAdapter mAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mAdapter = new PictureListAdapter(getApplicationContext());
        readImages();
        setListAdapter(mAdapter);
    }

    @Override
    protected void onListItemClick(ListView listView, View v, int pos, long l){
        File selectedFile = (File) getListAdapter().getItem(pos);
        Intent intent = new Intent(getApplicationContext(), ImageActivity.class);
        intent.putExtra("fullImage", BitmapFactory.decodeFile(selectedFile.getAbsolutePath()));
        startActivity(intent);
    }

    private void readImages(){
        File dir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        for(File f : dir.listFiles()){
            mAdapter.add(f);
        }
    }

}

这是我的适配器:

public class PictureListAdapter extends BaseAdapter {

    List<File> mItems = new ArrayList<>();
    Context context;

    //Other implements methods here

    public PictureListAdapter(Context context){
        this.context = context;
    }

    public void add(File file){
        mItems.add(file);
        notifyDataSetChanged();
    }

    @Override
    public View getView(int pos, View convertView, ViewGroup parent) {
        File picture = mItems.get(pos);

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        LinearLayout view = (LinearLayout) inflater.inflate(R.layout.picture_layout, parent, false);
        view.setClickable(true);

        ImageView imageView = (ImageView) view.findViewById(R.id.thumbnail);
        final Bitmap fullImage = BitmapFactory.decodeFile(picture.getAbsolutePath());
        imageView.setImageBitmap(Bitmap.createScaledBitmap(fullImage, 160, 120, true));

        TextView textView = (TextView) view.findViewById(R.id.image_filename);
        textView.setText(picture.getName());
        return view;
    }

}

最后,这是XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/thumbnail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="The thumbnail" />

    <TextView
        android:id="@+id/image_filename"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>
编辑:我现在点击了工作。我刚刚删除了适配器中的行:

view.setClickable(true);

我不明白。当我不再告诉它可点击时,它开始被点击了吗?这没有意义。有人可以解释一下吗?

顺便说一句,我现在又遇到了另一个错误,但我至少要点击onListItemClick()方法,这就是这个问题。我现在得到失败的Binder交易,但我想我知道它是什么导致它并将在明天修复它。

1 个答案:

答案 0 :(得分:1)

之所以如此,是因为您的观点拦截了点击事件。现在,您从查看允许列表处理点击的内容中删除了可点击的属性。