プロジェクトに存在するテキストビューを一定時間後に更新して更新し、画面/UIに変更を表示したい.デバッグごとに、テキストビューの値が変化しているが、変更が画面に表示されない/ui.これらは xml です。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:id="@+id/wrapper"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/comment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="5dip"
android:background="@drawable/bubble_yellow"
android:paddingLeft="10dip"
android:text="Hello bubbles!"
android:textColor="@android:color/primary_text_light" />
</LinearLayout>
</LinearLayout>
これはもう 1 つの xml です。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<include
layout="@layout/listitem_discuss" />
<ListView
android:id="@+id/listView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true" >
</ListView>
</RelativeLayout>
これはメインクラスです:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_discuss);
random = new Random();
ipsum = new LoremIpsum();
lv = (ListView) findViewById(R.id.listView1);
adapter = new DiscussArrayAdapter(getApplicationContext(), R.layout.listitem_discuss);
lv.setAdapter(adapter);
tv = (TextView)this.findViewById(R.id.comment);
ll = (LinearLayout)findViewById(R.id.wrapper);
addItems();
ReduceTimeIteration();
}
public void ReduceTimeIteration() // checks after 2 minutes for any message to delete
{
try
{
final Handler m_handler = new Handler();
m_handlerTask = new Runnable()
{
@Override
public void run()
{
String a = tv.getText().toString();
if(tv.getText() == "Hello bubbles!")
{
tv.setText("hi");
}
else{
tv.setText("hello"); // postInvalidate()
adapter.notifyDataSetChanged();
}
m_handler.postDelayed(m_handlerTask, 2000);
}
};
m_handlerTask.run();
}
catch(Exception e)
{
}
}
private String addItems() {
String a = "Hello bubbles";
adapter.add(new OneComment(true,a));
return a;
}
}
これは配列アダプター クラスです。
public class DiscussArrayAdapter extends ArrayAdapter<OneComment> {
private TextView countryName;
private List<OneComment> countries = new ArrayList<OneComment>();
private LinearLayout wrapper;
@Override
public void add(OneComment object) {
countries.add(object);
super.add(object);
}
public DiscussArrayAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
}
public int getCount() {
return this.countries.size();
}
public OneComment getItem(int index) {
return this.countries.get(index);
}
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.listitem_discuss, parent, false);
}
wrapper = (LinearLayout) row.findViewById(R.id.wrapper);
OneComment coment = getItem(position);
countryName = (TextView) row.findViewById(R.id.comment);
countryName.setText(coment.comment);
countryName.setBackgroundResource(coment.left ? R.drawable.bubble_yellow : R.drawable.bubble_green);
wrapper.setGravity(coment.left ? Gravity.LEFT : Gravity.RIGHT);
return row;
}
public Bitmap decodeToBitmap(byte[] decodedByte) {
return BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length);
}
}
これは、アダプターにデータを渡すクラスです。
public class OneComment {
public boolean left;
public String comment;
public OneComment(boolean left, String comment) {
super();
this.left = left;
this.comment = comment;
}
}
このプロジェクトでは、メイン クラスの textview tv の値を更新したいと考えています。値は実際には変化していますが、画面/UI に表示されません。助けてください。よろしくお願いします。