gpt4 book ai didi

android - 如何在数组的每次迭代后添加一些延迟,每次迭代都会更改 View 的属性。安卓

转载 作者:行者123 更新时间:2023-11-30 02:22:25 26 4
gpt4 key购买 nike

假设我有一组 char (mCharArray) 和一个 textView (tvChar),它是整个屏幕的大小。我想要的是,当用户单击屏幕(tvChar)时,textView 会显示 charArray 中的每个字符,但是它在每次迭代中应该有 1 秒的延迟。如何实现?

这是我目前的解决方案。此代码 fragment 来自 fragment 的 onViewCreated 部分。问题是,文本不会更新,它仅适用于 char 数组的最后一个元素。

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);

tvChar = (TextView) view.findViewById(R.id.tv_char);
tvChar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// not sure how to pause after each iteration...
v.postDelayed(new Runnable() {
@Override
public void run() {
for (char element : mCharArray) {
synchronized (tvChar) {
tvChar.setText(String.valueOf(element));

tvChar.notify();

try {
tvChar.wait(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}, 1000);
}
});
}

更新:感谢所有的答案,虽然当我尝试它们时没有一个真正有效,但你们帮助我给出了一些直觉。

我最终在 onCreate 上添加了线程处理程序

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mCharArray = getArguments().getCharArray(SENTENCE_KEY);
}

handler = new Handler(){
@Override
public void handleMessage(Message msg) {
this.obtainMessage();
tvChar.setText(Character.toString((char)msg.arg1));
}
};
}

在setOnclickListener中创建一个新线程

tvChar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
thread = new Thread(new ChangeCharThread());
thread.start();
}
});

创建一个实现 runnable 的内部类。

class ChangeCharThread implements Runnable{
@Override
public void run() {
Message msg = Message.obtain();

for (char ch : mCharArray){
msg.arg1 = ch;

handler.sendMessage(msg);

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

最佳答案

您可以在点击方法中尝试类似的方法。每个 UI 更新都会延迟一秒以同步行为。需要的是每次更新的时间表:

    for (int i= 0; i< mCharArray.length; i++) {
EventDetail.handler.postDelayed(new Runnable()
{
public void run()
{
tvChar.setText(String.valueOf(mCharArray[i]));
}
}, 1000 *(i+1));
}

关于android - 如何在数组的每次迭代后添加一些延迟,每次迭代都会更改 View 的属性。安卓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28291735/

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