Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义适配器中的Android ListView项不可选_Android - Fatal编程技术网

自定义适配器中的Android ListView项不可选

自定义适配器中的Android ListView项不可选,android,Android,我正在制作一个自定义适配器,这样我就可以显示一个带有图标的项目列表,它看起来像是长时间单击主屏幕时出现的菜单 由于某些原因,尽管列表项不可单击。可以使用D-pad导航到,但不能以任何方式单击。我想问题可能出在我使用的AlertDialog上,所以我更换了其他地方的工作适配器,但我在那里也遇到了同样的问题 我的适配器如下所示: ArrayList<IconListItem> mItems; LayoutInflater mInflater; public IconListAdapte

我正在制作一个自定义适配器,这样我就可以显示一个带有图标的项目列表,它看起来像是长时间单击主屏幕时出现的菜单

由于某些原因,尽管列表项不可单击。可以使用D-pad导航到,但不能以任何方式单击。我想问题可能出在我使用的AlertDialog上,所以我更换了其他地方的工作适配器,但我在那里也遇到了同样的问题

我的适配器如下所示:

ArrayList<IconListItem> mItems;
LayoutInflater mInflater;

public IconListAdapter(Context context, ArrayList<IconListItem> items) {
    mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    mItems = items;
}

public IconListAdapter(Context context) { 
    this(context, new ArrayList<IconListItem>()); 
}

public void add(IconListItem item) {
    mItems.add(item);
    notifyDataSetChanged();
    return item;
}

public void remove(IconListItem item) {
    mItems.remove(item);
    notifyDataSetChanged();
}

@Override
public int getCount() {
    return mItems.size();
}

@Override
public IconListItem getItem(int position) {
    return mItems.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view;
    if(convertView == null){
        view = mInflater.inflate(R.layout.two_line_icon_list_item, null);
    } else {
        view = convertView;
    }


    IconListItem item = mItems.get(position);
    TextView lineOne = (TextView) view.findViewById(R.id.firstLine);
    TextView lineTwo = (TextView) view.findViewById(R.id.secondLine);
    ImageView iconImage = (ImageView) view.findViewById(R.id.icon);

    lineOne.setVisibility(View.VISIBLE);
    lineTwo.setVisibility(View.VISIBLE);
    iconImage.setVisibility(View.VISIBLE);

    lineOne.setText(item.getText());

    if (item.getSubtext() == null)
        lineTwo.setVisibility(View.GONE);
    else 
        lineTwo.setText(item.getSubtext());



    if (item.getIcon() == null)
        iconImage.setVisibility(View.GONE);
    else 
        iconImage.setImageDrawable(item.getIcon());


    return view;
}
ListView lv = (ListView)findViewById(R.id.your_list_view);

lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) {
        Log.v(TAG, "Item clicked");
        // whatever you want to do with the clicked item...
    }
});
它停止工作。

您需要实现在单击中的项目时将调用的功能

大概是这样的:

ArrayList<IconListItem> mItems;
LayoutInflater mInflater;

public IconListAdapter(Context context, ArrayList<IconListItem> items) {
    mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    mItems = items;
}

public IconListAdapter(Context context) { 
    this(context, new ArrayList<IconListItem>()); 
}

public void add(IconListItem item) {
    mItems.add(item);
    notifyDataSetChanged();
    return item;
}

public void remove(IconListItem item) {
    mItems.remove(item);
    notifyDataSetChanged();
}

@Override
public int getCount() {
    return mItems.size();
}

@Override
public IconListItem getItem(int position) {
    return mItems.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view;
    if(convertView == null){
        view = mInflater.inflate(R.layout.two_line_icon_list_item, null);
    } else {
        view = convertView;
    }


    IconListItem item = mItems.get(position);
    TextView lineOne = (TextView) view.findViewById(R.id.firstLine);
    TextView lineTwo = (TextView) view.findViewById(R.id.secondLine);
    ImageView iconImage = (ImageView) view.findViewById(R.id.icon);

    lineOne.setVisibility(View.VISIBLE);
    lineTwo.setVisibility(View.VISIBLE);
    iconImage.setVisibility(View.VISIBLE);

    lineOne.setText(item.getText());

    if (item.getSubtext() == null)
        lineTwo.setVisibility(View.GONE);
    else 
        lineTwo.setText(item.getSubtext());



    if (item.getIcon() == null)
        iconImage.setVisibility(View.GONE);
    else 
        iconImage.setImageDrawable(item.getIcon());


    return view;
}
ListView lv = (ListView)findViewById(R.id.your_list_view);

lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) {
        Log.v(TAG, "Item clicked");
        // whatever you want to do with the clicked item...
    }
});

我发现了问题。我从布局文件中一行一行地删除,直到找到原因

导致问题的行是两行
android:inputType=“text”
。他们一定是让系统认为这两个文本视图是输入。我把它改成了android:inputType=“none”,现在它可以工作了


如果说singleLine已被弃用的巨大工具提示表明了这一点,那当然是件好事。

花了几个小时后,我发现如果在列表中的任何文本视图上设置了此属性,则无法选择listview项:

android:textIsSelectable="true"

“无法点击”是什么意思?请告诉我们您在哪里设置单击侦听器。@Cristian Castiblanco我编辑了这个问题。关于这个问题的更多信息。不,这不是问题所在。我确实实现了一个侦听器。还有别的问题。列表中的项目是不可点击的,我的意思是当我按下它们时,它们甚至不会以橙色突出显示。
android:textIsSelectable="true"