listview 中,textview的Ellipsize属性marquee失效问题

listview 中,textview的Ellipsize属性marquee失效问题

老师您好,问题如题目,虽找到了解决方法呢,动态设置singleline selected属性,但是引起textVIew点击不流畅或根本点不上的问题,请问为什么会发生这样的冲突?

package com.example.homework4_2.adapter;

import android.content.Context;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

import com.example.homework4_2.R;
import com.example.homework4_2.entity.News;

import java.util.List;
import java.util.zip.Inflater;

public class FavListViewAdapter extends BaseAdapter {

    List<News> newsList;
    Context context;
    public FavListViewAdapter(Context context , List<News> newsList){

        this.newsList = newsList;
        this.context = context;

    }


    @Override
    public int getCount() {
        return newsList.size();
    }

    @Override
    public Object getItem(int position) {
        return newsList.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null){

            convertView = LayoutInflater.from(context).inflate(R.layout.fav_item_layout, parent, false);
            holder = new ViewHolder();
            holder.textView = (TextView) convertView.findViewById(R.id.tV_fav_item);
            convertView.setTag(holder);

        }else {
            holder = (ViewHolder) convertView.getTag();
        }
        setTextViewMarquee(holder);
        holder.textView.setText(newsList.get(position).getNewsTitle());

        return convertView;
    }

    private void setTextViewMarquee(ViewHolder holder){
        // TODO: 2019/6/23  这里有的属性会使listview 的 item 的 onitemclicked 冲突导致不可点击或点击不顺畅,请问老师这是为什么? 
        holder.textView.setSingleLine(true);
//        holder.textView.setSelected(true);
//        holder.textView.setClickable(true);
//        holder.textView.setFocusable(true);
//        holder.textView.setFocusableInTouchMode(true);
//        holder.textView.setEllipsize(TextUtils.TruncateAt.MARQUEE);
        holder.textView.setEllipsize(TextUtils.TruncateAt.END);
    }


    private class ViewHolder{
        TextView textView;
    }
}

另外这个问题已在上传作业的todo中提到了,希望老师您能解答下,谢谢!

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

这是因为TextView需要在获取焦点时才会滚动,而如果加了setFocusable为true,ListView的焦点被TextView抢走,无法响应点击事件。解决方法:自定义一个View继承系统的TextView,覆盖isFocused()方法,直接返回true,这是因为系统会调用isFocused()方法判断TextView是否已经取到焦点。祝:学习愉快

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.Android 网络操作与流行框架
  • 参与学习           人
  • 提交作业       220    份
  • 解答问题       1800    个

本阶段是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理;从文件存储、到轻量级数据库SQLite的使用;最后利用最流程的第三方框架助你快速开发企业级APP。

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师