Android的更新列表视图不断,但保留的onClick功能 [英] Updating Android Listview Constantly but Retain onClick functionality

查看:159
本文介绍了Android的更新列表视图不断,但保留的onClick功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建的每个列表视图查看一个计时器,但是当我打电话notifyDataSetChange()不断,我无法点击我的按钮。

有没有一种方法不断更新时,可以保留一个ListView视图内按钮,EDITTEXT功能。有没有什么办法?

谢谢!

UPDATE:这是code我正在不间断的更新

  @覆盖
公共无效onActivityCreated(@Nullable捆绑savedInstanceState){
    super.onActivityCreated(savedInstanceState);    处理器=新的处理程序();
    handler.post(可运行);}
可运行可运行=新的Runnable(){
    @覆盖
    公共无效的run(){
        adapterWhiteMales.notifyDataSetChanged();
        handler.postDelayed(可运行,500);
    }
};

更新:我在每个列表视图视图按钮
没把我所有的code为getChildView和按钮点击,但这个是主要的设置。

  @覆盖
公共查看getChildView(最终诠释groupPosition,最终诠释childPosition,布尔isLastChild,查看视图的ViewGroup以及parentView)
{
   如果(查看== NULL){        viewHolderItem =新ViewHolderItem();
        吹气=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        鉴于= inflater.inflate(R.layout.row_explistview_child_meet_athletes,parentView,FALSE);
        viewHolderItem.btnStartLap =(按钮)view.findViewById(R.id.btnStartLap);        view.setTag(viewHolderItem);
    }其他{
        //使用已经初始化的变量
        viewHolderItem =(ViewHolderItem)view.getTag();
    }
   viewHolderItem.btnStartLap.setOnClickListener(新View.OnClickListener()
   {
            @覆盖
            公共无效的onClick(视图v){
                Log.e(,启动单圈单击按钮!);
            }
   }}


解决方案

我在我的应用程序之一了一个问题,如果我试图onClick的监听器多次设置将打破监听器,并导致怪异的行为。

试着改变你的getChildView方法,像这样

  @覆盖
公共查看getChildView(最终诠释groupPosition,最终诠释childPosition,布尔isLastChild,查看视图的ViewGroup以及parentView)
{
    如果(查看== NULL){        viewHolderItem =新ViewHolderItem();
        吹气=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        鉴于= inflater.inflate(R.layout.row_explistview_child_meet_athletes,parentView,FALSE);
        viewHolderItem.btnStartLap =(按钮)view.findViewById(R.id.btnStartLap);
        viewHolderItem.btnStartLap.setOnClickListener(新View.OnClickListener()
        {
            @覆盖
            公共无效的onClick(视图v){
                Log.e(,启动单圈单击按钮!);
            }
        }
        view.setTag(viewHolderItem);
    }其他{
        //使用已经初始化的变量
        viewHolderItem =(ViewHolderItem)view.getTag();
    }
}

I am creating a timer in each Listview view but when I call notifyDataSetChange() constantly, I am unable to click my buttons.

Is there a way to retain button and editText functionality inside a listview view when updated constantly. Is there any alternatives?

Thanks!

UPDATE: This is the code I am running to update continously

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    handler = new Handler();
    handler.post(runnable);

}
Runnable runnable = new Runnable(){
    @Override
    public void run() {
        adapterWhiteMales.notifyDataSetChanged();
        handler.postDelayed(runnable, 500);
    }
};

UPDATE: My buttons in each listview view Didn't put all my code for the getChildView and button on click, but this is the main setup.

@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View view, ViewGroup parentView)
{
   if (view == null) {

        viewHolderItem = new ViewHolderItem();
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.row_explistview_child_meet_athletes, parentView, false);
        viewHolderItem.btnStartLap = (Button) view.findViewById(R.id.btnStartLap);

        view.setTag(viewHolderItem);
    } else {
        // Use already initialized variables
        viewHolderItem = (ViewHolderItem) view.getTag();
    }
   viewHolderItem.btnStartLap.setOnClickListener(new View.OnClickListener()      
   {
            @Override
            public void onClick(View v) {
                Log.e("", "Start Lap Button Clicked!");
            }
   }

}

解决方案

I had an issue in one of my apps where if I tried to set the onClick listener multiple times it would break the listener and cause weird behavior.

Try changing your getChildView method like so

@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View view, ViewGroup parentView)
{
    if (view == null) {

        viewHolderItem = new ViewHolderItem();
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.row_explistview_child_meet_athletes, parentView, false);
        viewHolderItem.btnStartLap = (Button) view.findViewById(R.id.btnStartLap);
        viewHolderItem.btnStartLap.setOnClickListener(new View.OnClickListener()      
        {
            @Override
            public void onClick(View v) {
                Log.e("", "Start Lap Button Clicked!");
            }
        }
        view.setTag(viewHolderItem);
    } else {
        // Use already initialized variables
        viewHolderItem = (ViewHolderItem) view.getTag();
    }
}

这篇关于Android的更新列表视图不断,但保留的onClick功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆