【问题标题】:Android convertView安卓转换视图
【发布时间】:2014-04-30 07:25:36
【问题描述】:

我在 Baseadapter 中使用过像这样的水平列表视图。

private class ListViewItemClickListener implements
            AdapterView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {

            if (imageview != null) {
                previousImage = (ImageView) imageview
                        .findViewById(R.id.imageView);
                previousImage.setSelected(false);
                TextView previousTitle = (TextView) textview
                        .findViewById(R.id.title);
                previousTitle.setTextColor(Color.parseColor("#33D6AD"));
                previousTitle.setTextSize(TypedValue.COMPLEX_UNIT_SP, 13);
            }

            selected_image = (ImageView) view.findViewById(R.id.imageView);
            selected_image.setSelected(true);

            selected_text = (TextView) view.findViewById(R.id.title);
            selected_text.setTextColor(Color.parseColor("#368AFF"));
            selected_text.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);

            select_position = position;

            imageview = selected_image;
            textview = selected_text;

        }
    }

private static String[] dataObjects = new String[] { "그랜드 캐니언",
            "그레이트 베리어 리프", "디즈니 월드", "뉴질랜드 남섬", "케이프 타운", "암리차르의 황금사원",
            "라스베가스", "시드니", "뉴욕", "타지마할" };

private BaseAdapter mAdapter = new BaseAdapter() {

        @Override
        public int getCount() {
            return dataObjects.length;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = LayoutInflater.from(parent.getContext()).inflate(
                        R.layout.listitem, null);
            }
            TextView title = (TextView) convertView.findViewById(R.id.title);
            title.setText(dataObjects[position]);

            return convertView;
        }
    };

如果单击一项,我想更改文本颜色。但是每当我单击列表视图中的一项时,两项的颜色现在正在改变。这两项之间的距离始终为 5。我在 getView 代码上使用 convertView。并且 textcolor 更改代码在 clicklistener 方法中。我可以用 setTag、getTag 解决这个问题吗?如果是,我该如何解决?

【问题讨论】:

  • 发布您的点击监听器。
  • 显示您的更改颜色代码
  • 嗨。我编辑了我的问题
  • 您想突出显示所选项目。我说的对吗??
  • @MoonTaejin 看看我的回答。

标签: android listview convertview


【解决方案1】:

将此代码放入您的适配器类中:

private int selectedPos = -1;


public void setSelectedPosition(int pos){
    selectedPos = pos;
    notifyDataSetChanged();
}



 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
      if (convertView == null) {
           convertView = LayoutInflater.from(parent.getContext()).inflate(
                        R.layout.listitem, null);
       }
       TextView title = (TextView) convertView.findViewById(R.id.title);
       title.setText(dataObjects[position]);

        if (selectedPos == position) {
            title.setTextColor(Color.parseColor("#368AFF"));
            title.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
        } else {
           title.setTextColor(Color.parseColor("#000000"));
        }
        return convertView;
    }

在项目点击时,调用方法来设置当前位置:

public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
                adapter.setSelectedPosition(pos);
        }

【讨论】:

  • SweetWisher,你的意思是我必须把你的代码放到 BaseAdapter mAdapter = new BaseAdapter(){//here?????}?
  • 我照你说的做了。但这一次,一切都没有改变。即使我点击一个项目,你的代码也没有变化。
  • 那么你一定是遗漏了一些东西。这段代码对我有用。调试 n 检查是否 (selectedPos == position) 已完成。如果您的位置更新正确,它将像魅力一样工作。位置肯定有问题。。你在listview的item Click中调用了setSelectedPosition吗??
  • 除了选定的文本颜色变化外,一切正常。我当然叫 setSelectedPosition。
  • 把这一行放在 title.setTextColor(Color.parseColor("#368AFF"));最好你给我看看你的代码,这样我就可以解决你的问题
【解决方案2】:

尝试如下:

private class ListViewItemClickListener implements
        AdapterView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        mPager.setCurrentItem(position);


        selected_image = (ImageView) view.findViewById(R.id.imageView);
        selected_image.setSelected(true);

        selected_text = (TextView) view.findViewById(R.id.title);
        selected_text.setTextColor(Color.parseColor("#368AFF"));
        selected_text.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);

        select_position = position;

        imageview = selected_image;
        textview = selected_text;

        view.setTag((Integer) position);
    }
}

【讨论】:

  • 没有。它仍然检查了两个项目。一个是我的选择项,另一个是 5 距离项。
【解决方案3】:

试试这个

 convertView.setOnClickListener

而不是

 onItemClick

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多