Android 带有计时器的自定义listview适配器在滚动时刷新

Android 带有计时器的自定义listview适配器在滚动时刷新,android,listview,chronometer,Android,Listview,Chronometer,我已经创建了一个定制的listview适配器来安装一个按钮、一个定制的计时器和一个textview。当我滚动我的listview时,“隐藏”的行会自动刷新,所以计时器会自动刷新,即使计时器被隐藏,我如何保持计时器运行? 我是Android开发的新手,所以我可能做错了什么;我知道listview在滚动时会刷新它的行,但也许我在后台运行计时器时遗漏了一些东西 public class MyCustomAdapter extends BaseAdapter { ArrayList<St

我已经创建了一个定制的listview适配器来安装一个按钮、一个定制的计时器和一个textview。当我滚动我的listview时,“隐藏”的行会自动刷新,所以计时器会自动刷新,即使计时器被隐藏,我如何保持计时器运行? 我是Android开发的新手,所以我可能做错了什么;我知道listview在滚动时会刷新它的行,但也许我在后台运行计时器时遗漏了一些东西

public class MyCustomAdapter extends BaseAdapter {

    ArrayList<String> users;
    Context context;
    LayoutInflater inflater = null;

    public MyCustomAdapter(Activity mainActivity, ArrayList<String> usersList) {
        // TODO Auto-generated constructor stub
        users = usersList;
        context = mainActivity;
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return users.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return users.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    private class Holder {

        TextView tv;
        CustomChrono cr;
        Button but;
    }

    @Override
    public View getView(final int position, View convertView, final ViewGroup parent) {
        // TODO Auto-generated method stub
        final Holder holder = new Holder();
        View rowView;
        rowView = inflater.inflate(R.layout.customized_list_view, null);

            holder.tv = (TextView) rowView.findViewById(R.id.names_laps);
            holder.cr = (CustomChrono) rowView.findViewById(R.id.chronometer_laps);
            holder.but = (Button) rowView.findViewById(R.id.stop_button);
            holder.cr.start();
            holder.but.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //((ListView) parent).performItemClick(v, position, 0);
                    holder.cr.stop();
                    stopped = true;

                }
            });


            holder.tv.setText(users.get(position));

        rowView.setTag(holder);
        return rowView;
    }
公共类MyCustomAdapter扩展了BaseAdapter{
ArrayList用户;
语境;
排气充气机=空;
公共MyCustomAdapter(活动mainActivity,ArrayList usersList){
//TODO自动生成的构造函数存根
用户=用户列表;
上下文=主要活动;
充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回users.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回用户。获取(位置);
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回位置;
}
私人阶级持有者{
文本视图电视;
CustomChrono cr;
按钮但是;
}
@凌驾
公共视图getView(最终整型位置、视图转换视图、最终视图组父视图){
//TODO自动生成的方法存根
最终支架=新支架();
视图行视图;
rowView=充气机。充气(R.layout.customized\u list\u视图,空);
holder.tv=(TextView)rowView.findViewById(R.id.names\u laps);
holder.cr=(CustomChrono)rowView.findViewById(R.id.天文计\u圈);
holder.but=(按钮)rowView.findViewById(R.id.stop_按钮);
holder.cr.start();
holder.but.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//((ListView)父级).performItemClick(v,位置,0);
保持架。铬停止();
停止=真;
}
});
holder.tv.setText(users.get(position));
rowView.setTag(支架);
返回行视图;
}
}

然后我有了我的活动类,在这里我使用这个适配器

public class RunnerLaps extends AppCompatActivity {


ListView list;
ArrayList<String> runner_array;
private Map<Runner,String> map = new HashMap<Runner,String>(10);
private boolean isClicked = true;
private boolean isStartedNow = false;
boolean stopped = false;
ArrayList<Runner> arr_runners;
ArrayList<Runner> runners_arrList;
private long previousClickTime1 = 0;
Runner r = null;
String m = "";
SerializableManager serializableManager;
String filename = "myfile";
FileOutputStream outputStream = null;
ObjectOutputStream objectOutputStream = null;
//Button b;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_runner_laps);
    Intent i = getIntent();
    serializableManager = new SerializableManager();
    runner_array = (ArrayList<String>) getIntent().getSerializableExtra("KEY");
    ArrayList<Runner> running = getIntent().getExtras().getParcelableArrayList("arr2");
    runners_arrList = new ArrayList<Runner>(runner_array.size());
    for (String r : runner_array)
    {
        runners_arrList.add(new Runner(r));
    }
    for (int f = 0; f < runners_arrList.size();f++)
    {
        Log.d("Runner: " + f,runners_arrList.get(f).getName());
    }
    m = getIntent().getExtras().getString("booly");

    for (int j = 0; j < runner_array.size(); j++) {
        Runner r = new Runner(runner_array.get(j));
        map.put(r, runner_array.get(j));
    }
    if (m!= null)
    {
        stopped = true;
    }

    list = (ListView) findViewById(R.id.laps_list);
    final MyCustomAdapter adapter = new MyCustomAdapter(RunnerLaps.this,runner_array);
    list.setAdapter(adapter);




    //addRunners();



    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            CustomChrono chr = (CustomChrono) view.findViewById(R.id.chronometer_laps);
                r = runners_arrList.get(position);


                r.setTemp(System.currentTimeMillis());
                long temp = r.getTemp();
                previousClickTime1 = temp;
            if (previousClickTime1 != 0 && previousClickTime1 - temp < 300)
            {
                if (stopped == true)
                {
                    chr.stop();
                    r.laps[r.counter] = chr.getText().toString();
                    r.increaseCounter();
                    Intent i = new Intent (RunnerLaps.this,Runner_Display.class);
                    i.putExtra("key",(Serializable) r);
                    i.putParcelableArrayListExtra("arr",arr_runners);
                    for (int h = 0; h < runners_arrList.size();h++)
                    {
                        System.out.println(runners_arrList.get(h).getName() + "\n");
                        System.out.println(runners_arrList.get(h).laps[0] + "\n");
                        System.out.println(runners_arrList.get(h).laps[1] + "\n");
                        System.out.println(runners_arrList.get(h).laps[2] + "\n");
                    }

                    startActivity(i);
                }
                else
                {
                    r.laps[r.counter] = chr.getText().toString();
                    r.increaseCounter();
                    for (int h = 0; h < runner_array.size();h++)
                    {
                        System.out.println(runners_arrList.get(h).getName() + "\n");
                        System.out.println(runners_arrList.get(h).laps[0] + "\n");
                        System.out.println(runners_arrList.get(h).laps[1] + "\n");
                        System.out.println(runners_arrList.get(h).laps[2] + "\n");
                    }
                }

            }
            else
            {}
        }

    });
}
公共类RunnerLaps扩展AppCompative活动{
列表视图列表;
ArrayList runner_数组;
私有映射=新的HashMap(10);
私有布尔值isClicked=true;
私有布尔值isStartedNow=false;
布尔停止=假;
ArrayList arr_跑步者;
ArrayList\u arrList;
private long previousClickTime1=0;
r=null;
字符串m=”“;
SerializableManager SerializableManager;
字符串filename=“myfile”;
FileOutputStream outputStream=null;
ObjectOutputStream ObjectOutputStream=null;
//按钮b;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u runner\u laps);
Intent i=getIntent();
serializableManager=新的serializableManager();
runner_array=(ArrayList)getIntent().getSerializableExtra(“KEY”);
ArrayList running=getIntent().getExtras().getParcelableArrayList(“arr2”);
runners\u arrList=newarraylist(runner\u array.size());
for(字符串r:runner\u数组)
{
跑步者列表。添加(新跑步者(r));
}
对于(int f=0;f