我正在尝试像messenger
中那样发送消息。他们必须一个接一个地出现。因此,我使用LinearLayout
并向其中添加TextView
。但是一下子出现。我使用了循环,但看起来不起作用!
这是代码
final LinearLayout lm = (LinearLayout) findViewById(R.id.line_layout);
final LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
);
params.setMargins(10, 10, 500, 50);
int i = 0;
for (final Task task : tasks) {
i = i + 1;
for (int j = 0; j < 1; j++) {
final TextView message = new TextView(TaskActivity.this);
message.setText(task.getName());
message.setId(task.getId());
message.setLayoutParams(params);
message.setTextSize(30);
message.setBackground(getApplicationContext().getDrawable(R.drawable.task_text));
Toast.makeText(TaskActivity.this, "Text loaded",
Toast.LENGTH_SHORT).show();
lm.addView(message);
SystemClock.sleep(1000);
}
}
无论计时器如何,TextViews
都会立即出现。在循环的每个循环中,应用程序都会等待计时器,然后立即返回孔messengers
!
查看该应用程序的屏幕截图:
那么您将如何执行此任务并解决问题?谢谢!
答案 0 :(得分:0)
如果您想要像Messenger中那样的行为,则应在android中使用RecyclerView。
Option#unless
在添加新消息的时间间隔内,您可以使用recyclerview notify方法显示新消息。
答案 1 :(得分:0)
定义一个布局,您需要在其中添加textView,然后执行以下操作
LayoutParams lparams = new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
TextView tv=new TextView(this);
tv.setLayoutParams(lparams);
tv.setText("test");
this.parentLayout.addView(tv);
答案 2 :(得分:0)
您的代码正在uiThread上运行,因此UI在循环完成之前不会更新。看一下使用AsyncTask在后台暂停应用程序,并在完成后进行更新。尝试这样的事情:
public class TestActivity extends Activity
{
Queue<String> messages = new LinkedList<String>();
class PushNextMessage extends AsyncTask<Void, Void, Void>
{
@Override
protected Void doInBackground(Void... params)
{
try
{
Thread.sleep(1000);
}
catch (Exception ex)
{
ex.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void _void)
{
String message = messages.remove();
//this is where you add the view to the base layout
if (messages.size() > 0)
{
new PushNextMessage().execute();
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
messages.add("message 1");
messages.add("message 2");
messages.add("message 3");
new PushNextMessage().execute();
}
}