gpt4 book ai didi

android - View.setFocusable() 和 View.setClickable() 在自定义 ArrayAdapter 中有相反的效果

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:41:04 28 4
gpt4 key购买 nike

这是对 question 的跟进其中 Reimar Twelker建议使用 View.setFocusable()View.setClickable() 使用 ArrayAdapter 启用/禁用 ListView 中的行。

我试过这样做,但得到的效果与我预期的相反。如果我使用

View.setFocusable(true);
View.setClickable(true);

该行被禁用(当我按下它时没有效果)。如果我使用相反的方法:

View.setFocusable(false);
View.setClickable(false);

该行已启用(按下时应用选择)。

关于可能发生的事情的任何线索?

这是我的布局内容:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/row_style"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:paddingLeft="5dip"
android:paddingRight="5dip">

<ImageView android:id="@+id/row_image_style"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:adjustViewBounds="false"
android:scaleType="centerCrop"
android:drawingCacheQuality="low" />
</FrameLayout>

我在这样的警告对话框中使用它:

dialog = new AlertDialog.Builder(this)
.setTitle(R.string.templates_dialog)
.setAdapter(new StyleAdapter(this, R.id.row_style, StyleTemplate.values()),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
setTemplate(StyleTemplate.values()[which]);
}
})
.create();
dialog.setCanceledOnTouchOutside(true);

StyleAdapter定义如下:

public class StyleAdapter extends ArrayAdapter<StyleTemplate>{

private final StyleTemplate[] m_objects;
private final LayoutInflater inflater;

public StyleAdapter(Context context, int textViewResourceId, StyleTemplate[] objects) {
super(context, textViewResourceId, objects);
m_objects = objects;
inflater = getLayoutInflater();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) { // Reuse the old view if it exists
row = inflater.inflate(R.layout.row_style, parent, false);
}

// Get the selected style data
StyleTemplate style = m_objects[position];

// Set the background image to the template background
ImageView bg = (ImageView) row.findViewById(R.id.row_image_style);
bg.setImageDrawable(null);
bg.setBackgroundColor(Color.rgb(style.bR, style.bG, style.bB));

boolean val = true;
row.setFocusable(val);
row.setClickable(val);

return row;
}
}

为了测试setFocusable()setClickable() 的效果,我简单地更改了StyleAdapter 中val 的值。 getView().

最佳答案

实际上 here我找到了这一切的解释。问题是,如果您将 View 设置为可点击,那么它将消耗点击并且不会将其传播到容器。

因此 convertView.setClickable(true) 实际上禁用了点击。

关于android - View.setFocusable() 和 View.setClickable() 在自定义 ArrayAdapter 中有相反的效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9512209/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com