1

我有一个带有计时器的 ListView 的行 xml


<LinearLayout android:layout_width="fill_parent"
android:id="@+id/layout_orders_list_row_ll_Timer" 
android:focusable="false"   
android:layout_height="wrap_content" 
android:gravity="center_horizontal|right"
android:layout_gravity="center">
<Chronometer android:text="@+id/Chronometer01"
    android:layout_height="wrap_content" android:layout_width="wrap_content"
    android:id="@+id/layout_orders_list_row_chr_Timer"
    android:focusable="false" android:focusableInTouchMode="false"
    android:layout_gravity="center" android:enabled="true">
</Chronometer>
<Button android:background="@drawable/check" android:layout_height="wrap_content" 
    android:id="@+id/layout_orders_list_row_bt_Done" 
    android:layout_width="wrap_content" android:focusable="false"                   android:onClick="OnRowButtonClick">
</Button>


我想为每一行启动我的计时器。我从数据库中获取数据并填充适配器。之后我连接到每个计时器并尝试计算它。但它不起作用。

    SimpleAdapter simpleAdapter = new SimpleAdapter(this, fillMaps,
            R.layout.orders_list_row, from, to);

    listView.setAdapter(simpleAdapter);

       for (int i = 0; i < simpleAdapter.getCount(); i++) {

        LinearLayout vwParentRow = (LinearLayout) simpleAdapter.getView(i,
                null, null);

        LinearLayout ChildTop = (LinearLayout) vwParentRow.getChildAt(0);
        LinearLayout ChildTop2 = (LinearLayout) ChildTop.getChildAt(1);
        final Chronometer chrono = (Chronometer) ChildTop2.getChildAt(0);
        chrono.setText("00:00:00");
        chrono.setBase(SystemClock.elapsedRealtime());
        chrono.start();

        chrono.setOnChronometerTickListener(new OnChronometerTickListener() {

            public void onChronometerTick(Chronometer arg0) {
                // TODO Auto-generated method stub

                    long minutes = ((elapsedTime - chrono.getBase()) / 1000) / 60;
                    long seconds = ((elapsedTime - chrono.getBase()) / 1000) % 60;
                    currentTime = minutes + ":" + seconds;
                    arg0.setText(currentTime);
                    elapsedTime = elapsedTime + 1000;

            }

        });

    }

    listView.invalidate();

我做错了什么?也许还有其他解决方案如何在每一行中启动计时器?

4

1 回答 1

1

为了解决这个问题,我创建了自己的适配器,因为没有适合解决方案的标准有价值的选项。


public class SimpleAdapterWithCheckbox extends SimpleAdapter {


public SimpleAdapterWithCheckbox(Context context,
        List<? extends Map<String, ?>> data, int resource, String[] from,
        int[] to) {
    super(context, data, resource, from, to);

}

 // method getView start for each row in adapter to show it in ListView
 public View getView(int position, View convertView, ViewGroup parent) {                
        View v = super.getView(position, convertView, parent);
        startChrono(v);// starting for each row
        return v;       
    }


 private void  startChrono(View v){

    //Here we need to know structure of layout to get our element 
    LinearLayout vwParentRow = (LinearLayout)v;
    LinearLayout ChildTop = (LinearLayout) vwParentRow.getChildAt(0);
    LinearLayout ChildTop2 = (LinearLayout) ChildTop.getChildAt(1);

    //Now, we get chronometer and could work with it as we wont
    Chronometer chrono = (Chronometer) ChildTop2.getChildAt(0);
    chrono.setBase(SystemClock.elapsedRealtime());
    chrono.start();

 }

}


这不是最好的情况,但对我来说效果很好。

于 2010-12-23T15:17:52.443 回答