【问题标题】:Custom List View with custom list item which has Spinner具有 Spinner 的自定义列表项的自定义列表视图
【发布时间】:2015-11-14 15:23:54
【问题描述】:

我正在使用具有微调器和文本框的自定义列表项实现自定义列表视图。我想在列表视图的列表项中使用onItemSelected() 保存选定的微调器值,但我不知道要找到一个包含用户正在处理的微调器的列表项。我怎样才能得到这个,有人可以帮忙吗?

下面是我在列表视图适配器中的代码。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View listItemView = convertView;

    if (listItemView == null) {
        listItemView = inflater.inflate(R.layout.listitem, null);
        ViewHolder viewHolder = new ViewHolder();
        viewHolder.view1 = (Spinner) listItemView.findViewById(R.id.view1);
        viewHolder.view2 = (TextView) listItemView.findViewById(R.id.view2);

        viewHolder.view1.setFocusable(false);
        viewHolder.view2.setFocusable(false);

        viewHolder.view1.setAdapter(view1Adapter);
        viewHolder.view1.setPrompt("Select");
        viewHolder.view1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String selectedId = spinnerItemList.get(position).id;
                // todo : need to find a way to get list item of list view, which has this spinner, like the position of getView().
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

        listItemView.setTag(viewHolder);
    }

    CustomListItem item = listViewItemList.get(position);
    ViewHolder viewHolder = listItemView.getTag();
    viewHolder.view1.setSelection(item.view1Value);
    viewHolder.view2.setText(String.valueOf(item.view2Value));

    return listItemView;
}

【问题讨论】:

  • @Loc 是的,它不需要是实例,CustomListItem 的索引就可以了。

标签: android android-listview android-spinner


【解决方案1】:

如果您要处理适配器内微调器的 onItemSelected,请尝试以下操作:

//将activity/fragment的上下文传递给适配器

context.saveSelectedValue(selectedId);

//将选中的它保存在activity/fragment中

public void saveSelectedValue(String id){
   //code to save
}

【讨论】:

  • 谢谢,但我想我也需要知道 CustomListItem 的索引。而得到它的方法是我真正想知道的。
【解决方案2】:

我将我发现的内容发布为与我有同样问题的人的答案。实际上我从 Loc 的回答中看到了这个想法,但他以某种方式删除了他的回答。也许这个解决方案可能存在严重问题。无论如何,这对我现在有用。

我使用 setTag() 和 getTag() 来获取 CustomListItem。请看下面的代码。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  View listItemView = convertView;

  if (listItemView == null) {
    listItemView = inflater.inflate(R.layout.listitem, null);
    ViewHolder viewHolder = new ViewHolder();
    viewHolder.view1 = (Spinner) listItemView.findViewById(R.id.view1);
    viewHolder.view2 = (TextView) listItemView.findViewById(R.id.view2);

    viewHolder.view1.setFocusable(false);
    viewHolder.view2.setFocusable(false);

    viewHolder.view1.setAdapter(view1Adapter);
    viewHolder.view1.setPrompt("Select");
    viewHolder.view1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            String selectedId = spinnerItemList.get(position).id;
            // todo : need to find a way to get list item of list view, which has this spinner, like the position of getView().
            CustomListItem item = (CustomListItem)parent.getTag();
            item.view1Value = selectedId;
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

    listItemView.setTag(viewHolder);
  }

  CustomListItem item = listViewItemList.get(position);
  ViewHolder viewHolder = listItemView.getTag();
  viewHolder.view1.setSelection(item.view1Value);
  viewHolder.view.setTag(item);
  viewHolder.view2.setText(String.valueOf(item.view2Value));

  return listItemView;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-05
    • 2016-04-30
    • 2011-07-25
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多