我是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交易,但我想我知道它是什么导致它并将在明天修复它。
答案 0 :(得分:1)
之所以如此,是因为您的观点拦截了点击事件。现在,您从查看允许列表处理点击的内容中删除了可点击的属性。