首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >onLongClickListener问题

onLongClickListener问题
EN

Stack Overflow用户
提问于 2015-09-27 08:04:48
回答 1查看 466关注 0票数 0

这段代码是来自我的BaseAdapter的部分代码,它适应了我的可扩展列表视图。

这个应用程序通常是一个可扩展的ListView。

我的目标是在用户长时间单击后将文本视图颜色设置为蓝色

在我的列表视图的父布局中,我得到了两个字符串,持有者正在处理这两个字符串。

我设法在所需位置设置了onClickListener,并设置了所需功能。问题是,现在我需要两个函数同时发生:当长时间单击时: 1.复制到剪贴板(子对象的上下文) 2.将复制的父文本视图的行刷成一种颜色,以指示该行已被复制

现在的问题是我不知道如何实现它。我还知道设置textview的bg颜色的代码

"TextView".setBackgroundColor(Color.parseColor("#FF5555"));"TextView".setHighlightColor(Color.BLUE);

等等。

提前感谢您的回复/帮助/协助,干杯。

代码语言:javascript
运行
复制
static class ViewHolder {
    TextView rname_parent;
    TextView city_parent;
}

    @Override
public View getGroupView(int parent, boolean isExpanded, View convertView, ViewGroup parentView) {
    Group group = (Group) getGroup(parent);
        ViewHolder holder;
    if(convertView == null) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.parent_layout, parentView, false);
    //}

        //convertView.setOnLongClickListener(new LongClick(group.getName()));
        holder = new ViewHolder();
        holder.rname_parent = (TextView) convertView.findViewById(R.id.rname_parent_layout);
        holder.city_parent = (TextView) convertView.findViewById(R.id.city_parent_layout);

        convertView.setTag(holder);
    }
     else {
        holder = (ViewHolder) convertView.getTag();
    }

        holder.rname_parent.setText(group.getName());
        holder.rname_parent.setTypeface(null, Typeface.BOLD_ITALIC);
        holder.rname_parent.setTextSize(27);
        holder.city_parent.setText(group.getCity());

    return convertView;
}

//TODO ########################################################################
//TODO ##############this.content = The clipBoard String#######################
//TODO ########################################################################
    @SuppressWarnings("deprecation")

    class  LongClick implements View.OnLongClickListener {
        private String content;
        public  LongClick (String content,String c2, String c3, String c4, String c5,String c6,String c7,String c8,String c9) {
            this.content = content+" "+c2+content;

        }

         // constructor used to obtain the item's valu
        @Override
        public  boolean  onLongClick (View  View){
            ClipboardManager clipboard = (ClipboardManager)
                    View.getContext().getSystemService(Context.CLIPBOARD_SERVICE);
            // Scrapbook Manager
            clipboard.setText(content);

            // set the value of the scrapbook item of
            Toast mToast = Toast.makeText(View.getContext(), "Copy to the Clipboard", Toast.LENGTH_SHORT);
            mToast.show();
            return  true ;
        }
    }


    //this method will return a view for each sub category

    @Override
    public View getChildView(final int parent, int childPosition, boolean LastChild, View convertView, ViewGroup parentView) {
        Child child = (Child) getChild(parent, childPosition);
        ArrayList<Child> ch = getAllchildren(parent);

        // if there is no current view for the specific child this will create it
        if(convertView == null){
            LayoutInflater inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflator.inflate(R.layout.child_layout, parentView,false);
        }
       convertView.setOnLongClickListener(new LongClick(ch.get(0).getName(), ch.get(1).getName(), ch.get(2).getName(), ch.get(3).getName(), ch.get(4).getName(), ch.get(5).getName(), ch.get(6).getName(), ch.get(7).getName(), ch.get(8).getName()));
/*
        convertView.isClickable();
        convertView.setLongClickable(true);
        convertView.setOnClickListener(new View.OnClickListener() {
        ArrayList<Child> ch = getAllchildren(parent);

        @Override
        public void onClick(View v) {
            new LongClick(ch.get(0).getName(), ch.get(1).getName(), ch.get(2).getName(), ch.get(3).getName(), ch.get(4).getName(), ch.get(5).getName(), ch.get(6).getName(), ch.get(7).getName(), ch.get(8).getName());
        }
        //new LongClick(ch.get(0).getName(), ch.get(1).getName(), ch.get(2).getName(), ch.get(3).getName(), ch.get(4).getName(), ch.get(5).getName(), ch.get(6).getName(), ch.get(7).getName(), ch.get(8).getName())
        }
        );
        convertView.setOnLongClickListener(new View.OnLongClickListener() {
            ArrayList<Child> ch = getAllchildren(parent);
            @Override
            public boolean onLongClick(View v) {
                new LongClick(ch.get(0).getName(), ch.get(1).getName(), ch.get(2).getName(), ch.get(3).getName(), ch.get(4).getName(), ch.get(5).getName(), ch.get(6).getName(), ch.get(7).getName(), ch.get(8).getName());
                return true;
            }
        });
*/
        TextView child_textview = (TextView) convertView.findViewById(R.id.child_txt);
        child_textview.setText(child.getName().toString());

        return convertView;
    }

尝试了TBridges的解决方案,添加了实现和logcat错误,很明显我做错了什么,显然我没有将OnLongClick视图寻址到确切的TextView :/

日志消息:

代码语言:javascript
运行
复制
Attempt to invoke virtual method 'void android.widget.TextView.setBackgroundColor(int)' on a null object reference

新的实现:

代码语言:javascript
运行
复制
@Override
        public  boolean  onLongClick (View  View){
            ClipboardManager clipboard = (ClipboardManager)
                    View.getContext().getSystemService(Context.CLIPBOARD_SERVICE);
            // Scrapbook Manager
            clipboard.setText(content);

            // set the value of the scrapbook item of
            Toast mToast = Toast.makeText(View.getContext(), "Copy to the Clipboard", Toast.LENGTH_SHORT);
            mToast.show();
            //ViewHolder holder;
           // holder = new ViewHolder();
            //holder.rname_parent = (TextView) View.findViewById(R.id.rname_parent_layout);
            TextView tv = (TextView) View.findViewById(R.id.rname_parent_layout);
            if (View instanceof TextView) {
                tv = (TextView) View;
            }
            tv.setBackgroundColor(Color.parseColor("#FF5555"));
            return  true ;
        }
    }

//吓死我了

EN

回答 1

Stack Overflow用户

发布于 2015-09-27 08:25:41

onLongClick()中,您应该能够执行以下操作:

代码语言:javascript
运行
复制
Textview textView;
if (view instanceof TextView) {
    textView = (TextView) view;
}
// change text view's color
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32803261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档