Как сделать так, чтобы ListItem Textview работал в твиттере Twitter и получал разные клики Linkify?

1

Например:

Следуйте @SoccerBible, RT это, и если оценки Роналдо https://bit.ly/133/com сегодня мы отдадим пару Nike Clash Vapor 8 одному счастливному победителю! #RonaldoComp

В моем компоненте listview. Где я показываю список твитов. Я покрасил @, # и URL-адреса в тексте твита. Все они динамически доступны.

Мой вопрос заключается в том, как я могу сделать нецветный текст нажатием. Я использовал Linkify.addLinks и шаблон API, чтобы сделать их интерактивными. Но я хотел, чтобы текст non @, # и url был clicakble, не добавляя никакого цвета к нему.

Спасибо, Dominic

  • 0
    Напишите событие щелчка TextView, чтобы сделать это,
  • 0
    Нет никакой проблемы в написании события click для textView. Затем, когда дело доходит до точки, все textViews будут перенаправлены на одно и то же событие. Это должно быть dyanamic.
Показать ещё 5 комментариев
Теги:
android-textview
android-listview

1 ответ

5
Лучший ответ

Для приложения twitter у меня также было такое же требование, чтобы щелкнуть по ручкам твитов, а также щелкнуть по тексту твита, чтобы получить деталь Tweet.

Для этого я использовал этот LinkEnabledTextView, и мне стало легче выполнять эту задачу.

Я просто добавил класс в свой проект, а затем в List Item вместо простого TextView Я использовал объект/экземпляр LinkEnabledTextView.

В приведенной выше ссылке есть полная демонстрация, пожалуйста, проверьте это.

EDIT: Код адаптера Специально проверьте onTextLinkClick(), а затем файл holder.twtdata.setOnClickListener()

    private static class EfficientAdapter extends BaseAdapter implements TextLinkClickListener {
        private LayoutInflater mInflater;
        static int pos =0;
        public EfficientAdapter(Context context) {
            mInflater = LayoutInflater.from(context);
        }

        public int getCount() {
            return timelines.length;
        }

        public Object getItem(int position) {
            return position;
        }

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

        public View getView(final int position, View convertView,
                ViewGroup parent) {

            ViewHolder holder;
            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.listtimerow, null);
                holder = new ViewHolder();
                holder.twtdata = (LinkEnabledTextView) convertView
                        .findViewById(R.id.twtdata);
                holder.twtnm = (TextView) convertView
                        .findViewById(R.id.twthandle);
                holder.twtimg = (ImageView) convertView
                        .findViewById(R.id.avatar);
                holder.twtdt = (TextView) convertView
                        .findViewById(R.id.created);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
               holder.twtdata.setOnTextLinkClickListener(this);
                holder.twtdata.gatherLinksForText(timelines[position]);
                holder.twtdata.setTextColor(Color.BLACK);
                holder.twtdata.setLinkTextColor(Color.BLUE);

                MovementMethod m = holder.twtdata.getMovementMethod();
                if ((m == null) || !(m instanceof LinkMovementMethod)) {
                    if (holder.twtdata.getLinksClickable()) {
                        holder.twtdata.setMovementMethod(LinkMovementMethod.getInstance());
                    }
                }

            if (bmpimg1[position] != null)
                holder.twtimg.setImageBitmap(bmpimg1[position]);
            holder.twtnm.setText(twitterhandles[position]);
            Date credate = new Date(created[position]);

            String dt = credate.getDate() + " "
                    + getMonthName(credate.getMonth());
            holder.twtdt.setText(dt);

            holder.twtdata.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                    pos = position;
                    if(linkselected==true)
                        return;
                    childSelected = true;

                    Log.i("mention data", timelines[position]);
                    Intent textintent = new Intent(ctx, TimelineRe.class);
                    textintent.putExtra("userid", userid[position]);
                    textintent.putExtra("nm", twitterhandles[position]);
                    textintent.putExtra("msg", timelines[position]);
                    textintent.putExtra("pos", position);
                    textintent.putExtra("frm", "t");
                    textintent.putExtra("img", bmpimg1[position]);

                    if (urlentities[position] != null
                            && dpurlentities[position] != null) {
                    textintent.putExtra("urlentity", urlentities[position]);
                    textintent.putExtra("dpurlentity", dpurlentities[position]);
                    }
                    textintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                    ctx.startActivity(textintent);
                }
            });
            holder.twtnm.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                    childSelected = true;
                    Intent iconintent = new Intent(ctx, TweetRe.class);
                    iconintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    iconintent.putExtra("userid", userid[position]);
                    iconintent.putExtra("pos", position);
                    iconintent.putExtra("frm", "t");
                    iconintent.putExtra("img", bmpimg1[position]);
                    ctx.startActivity(iconintent);
                }
            });
            holder.twtimg.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                    childSelected = true;
                    Intent iconintent = new Intent(ctx, TweetRe.class);
                    iconintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    iconintent.putExtra("userid", userid[position]);
                    iconintent.putExtra("pos", position);
                    iconintent.putExtra("frm", "t");
                    iconintent.putExtra("img", bmpimg1[position]);
                    ctx.startActivity(iconintent);
                }
            });
            return convertView;

        }
        @Override 
        public int getItemViewType(int position) { 
            return position; 
        } 

        @Override 
        public int getViewTypeCount() { 
            return timelines.length;
        } 
        static class ViewHolder {

            TextView twtdt;
            LinkEnabledTextView twtdata;
            ImageView twtimg;
            TextView twtnm;
        }

        public void onTextLinkClick(View textView, String clickedString)
        {
            if (isWiFiConnected == false) {
                Toast.makeText(ctx,
                        "No Internet Connection \nPlease Check and Retry",
                        Toast.LENGTH_SHORT).show();

                return;
            }
            android.util.Log.v("Hyperlink clicked is :: " + clickedString, "Hyperlink clicked is :: " + clickedString);
            if(clickedString.charAt(0)=='#')
            {
                linkselected=true;
                childSelected=true;
                Intent reintent = new Intent(ctx,
                        Search.class);
                reintent.putExtra("frm", "l");
                reintent.putExtra("keyword",clickedString.substring(1, clickedString.length()) );
                reintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                ctx.startActivity(reintent);
            }
            else if(clickedString.charAt(0)=='@')
            {
                linkselected=true;
                childSelected=true;
                Intent iconintent = new Intent(ctx, TweetRe.class);
                iconintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                iconintent.putExtra("snm", clickedString.substring(1,clickedString.length()));
                iconintent.putExtra("frm", "l");
//              iconintent.putExtra("userid", userid[pos]);
//              iconintent.putExtra("pos", pos);

//              iconintent.putExtra("img", bmpimg2[pos]);
                ctx.startActivity(iconintent);
            }
            else if(clickedString.charAt(0)=='h')
            {
                linkselected=true;
                childSelected=true;
                Intent iconintent = new Intent(ctx, ShowLink.class);
                iconintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                iconintent.putExtra("url","http://www."+dpurlentities[pos]);
                ctx.startActivity(iconintent);

            }
        }
    }
  • 0
    Привет, я решил код, который он запускает, но выдает ошибку в строке. list.setAdapter (адаптер); Я создал объект класса адаптера как EfficientAdapter adapter = new EfficientAdapter (getBaseContext ()); на методе onCreate ().
  • 0
    stackoverflow.com/questions/11154701/...
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню