onLongClickListener问题

时间:2015-09-27 00:04:48

标签: android listview

此代码是我的BaseAdapter的部分代码,它可以调整我的可扩展列表视图。

此应用程序通常是可扩展ListView。

我的目标是在用户长按

后将textview颜色设置为蓝色

在我的listview的父布局中,我有2个字符串,持有人正在解决它们。

我设法在所需位置设置onClickListener并设置所需的功能。 事情是,现在我需要同时发生2个功能: 长按时: 1.复制到剪贴板(孩子的上下文) 2.将复制的父文本视图行绘制为一种颜色,以指示该行已被复制

现在的问题是我在弄清楚如何实现它时遇到了麻烦。 我也知道设置textview' sbg颜色的代码

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

等。

提前感谢任何回应/帮助/协助,欢呼。

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:/

logcat消息:

Attempt to invoke virtual method 'void android.widget.TextView.setBackgroundColor(int)' on a null object reference

新实施:

@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 ;
        }
    }

//吓坏我了

1 个答案:

答案 0 :(得分:0)

onLongClick()中你应该能够做到这样的事情:

Textview textView;
if (view instanceof TextView) {
    textView = (TextView) view;
}
// change text view's color