gpt4 book ai didi

java - Android:ListView 行中的计时器?

转载 作者:行者123 更新时间:2023-11-30 04:47:31 26 4
gpt4 key购买 nike

我的带有计时表的 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();

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

最佳答案

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


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();

}


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

关于java - Android:ListView 行中的计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4500399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com