我的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();
我做错了什么?也许有其他解决方案如何在每一行启动天文台?
答案 0 :(得分: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();
}
}
这不是最好的情况,但对我来说效果很好。