滚动后,带有计时器的自定义列表视图适配器会刷新

时间:2018-08-25 10:27:35

标签: android listview chronometer

我创建了一个自定义列表视图适配器以适合按钮,自定义计时器和文本视图。当我滚动列表视图时,“隐藏”的行会刷新自身,从而使计时码表刷新,即使隐藏起来,如何使计时码表保持运行? 我是Android开发的新手,所以我可能做错了什么;我知道列表视图在滚动时会刷新其行,但也许我错过了一些使计时器在后台运行的功能

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

}

然后我有我的活动课,我在这里使用此适配器

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
            {}
        }

    });
}

}

0 个答案:

没有答案