如何结束Android自定义微调器的下拉模式
我正在创建一个微调器实例,绑定到自己的自定义适配器类(从BaseAdapter派生)。在其中,我创建了一组自定义的“单元”线性布局派生实例,这些实例从xml中膨胀出来,用于微调器中的每个项目 一切正常,但只要单击“下拉”模式下的项目,下拉对话框就不会被取消 我可以在我的cell类中捕获单击通知,但是我需要什么魔法来告诉微调器某个项目被选中,并且它应该关闭下拉列表 My cell类由以下xml扩展而来: 谢谢!如何结束Android自定义微调器的下拉模式,android,Android,我正在创建一个微调器实例,绑定到自己的自定义适配器类(从BaseAdapter派生)。在其中,我创建了一组自定义的“单元”线性布局派生实例,这些实例从xml中膨胀出来,用于微调器中的每个项目 一切正常,但只要单击“下拉”模式下的项目,下拉对话框就不会被取消 我可以在我的cell类中捕获单击通知,但是我需要什么魔法来告诉微调器某个项目被选中,并且它应该关闭下拉列表 My cell类由以下xml扩展而来: 谢谢! 猪我会删除整个数据单元类,因为它对您没有好处。如果我不得不猜测的话,微调器的99.9
猪我会删除整个
数据单元
类,因为它对您没有好处。如果我不得不猜测的话,微调器的99.9%的使用并不涉及创建自己的线性布局的子类
如果这个类有比您选择显示的更多的内容,足以让它变得有价值,那么您不应该截取和使用click事件<代码>微调器
自动处理该操作。如果非要我猜的话,99.999%的微调器的使用与点击事件中的下拉列表内容无关。所以你说的单元格窃取点击是对的。但有一个非常简单的解决方案,只是不太明显。我所要做的就是让我的数据单元中的文本视图不响应点击
因此,我完全删除了m_labelName.onClickListener()调用,并在该位置输入以下代码:
m_labelName.setClickable(false);
m_labelName.setFocusable(false);
m_labelName.setFocusableInTouchMode(false);
它应该自动关闭。感觉微调器没有获取事件。“单元格”中有什么?如何控制微调器中项目的格式?我的cell类的全部要点是允许以后进行扩展,比如在微调器下拉列表中为每个项目添加图标等。这是一种常见的方法(组件化)。如果你知道更好的方法,我洗耳恭听。谢谢。@SwineFaster:“您还可以如何控制微调器内项目的格式?”——只需将适当的XML布局ID(例如,R.ID.spinner\u项目
)传递给SpinnerAdapter即可。“这是一种常见的方法(组件化)。”——除非有实质性的业务逻辑,否则在Java中不会“组件化”。Android中的GUI合成是通过布局XML资源处理的。是的,我使用自己的适配器,因为它需要连接到从后端子系统填充的自定义数据模型。
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import android.view.View.OnClickListener;
// This class is responsible for rendering the data in the model.
public class DataCell extends LinearLayout implements OnClickListener
{
private final String TAG = getClass().getSimpleName();
public DataCell(Context context)
{
super(context);
m_context = context;
final boolean attachToRoot = true;
LayoutInflater.from(context).inflate(R.layout.data_cell,
this, attachToRoot);
m_labelName = (TextView) findViewById(R.id.STATIC_LEAF_NAME);
m_labelName.setOnClickListener(this);
}
// Update the views with the data corresponding to selection index.
// If dropDown is true, this view is to be displayed in a dropped down
// list.
public void display(int index, ViewGroup parent, Data data, boolean dropDown)
{
m_data = data;
m_labelName.setText(data.getFriendlyName());
setFocusable(true);
}
@Override
public void onClick(View view)
{
ViewParent parent = getParent();
if(parent instanceof Spinner)
{
//((Spinner)parent).setSelection(2);// TODO something here?
}
}
private TextView m_labelName = null;
@SuppressWarnings("unused")
private Context m_context = null;
@SuppressWarnings("unused")
private Data m_data = null;
}
m_labelName.setClickable(false);
m_labelName.setFocusable(false);
m_labelName.setFocusableInTouchMode(false);