Kolejny raz mam problem ze swoja durnowata aplikacją. Tak więc po krótce, zrobiłem 2 apki. Jedna działa na PC (serwer), druga na Andku. Wysyłam sobie to co mnie interesuje z serwera na Andka, wszystko ładnie czyta i wyświetla. Jednak chciałem sobie dodać kolejną aktywność bezpośrednio powiązaną z pierwsza. Męczę się od jakiegoś czasu, żeby dodać kolejnego xmla z layoutem, na którym będzie wyświetlany tekst w stylu "Oczekiwanie na wiadomość" w momencie kiedy klient połączy się z serwerem, a zniknie gdy wyśle jakąkolwiek wiadomość. Chyba wiadomo o co chodzi :)
Wizualnie wyglada to tak, gdzie ten kolorek jest animowany:
http://img16.imageshack.us/img16/1021/screenshot2013010901414.png
Przed wyświetleniem wiadomości o w/w treści chciałbym, żeby pojawiło się okienko z ze statusem oczekiwania. Jest to o tyle problematyczne, że nie jestem zbytnio sobie sam poradzić ponieważ większość tutoriali dotyczy zmiany Aktywności przy pomocy guzika, a mnie taka opcja nie interesuje. Wszystko ma działać automatycznie, bez jakiejkowiek ingerencji ze strony użytkownika.
Kod:
Activity
package com.example.myactivity;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
public class MyActivity extends Activity
{
private ListView mList;
private ArrayList<String> arrayList;
private MyCustomAdapter mAdapter;
private TCPClient mTcpClient;
private static Context context;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
arrayList = new ArrayList<String>();
mList = (ListView)findViewById(R.id.list);
mAdapter = new MyCustomAdapter(this, arrayList);
mList.setAdapter(mAdapter);
new connectTask().execute("");
mAdapter.notifyDataSetChanged();
}
public class connectTask extends AsyncTask<String,String,TCPClient>
{
protected TCPClient doInBackground(String... message)
{
mTcpClient = new TCPClient(new TCPClient.OnMessageReceived()
{
public void messageReceived(String message)
{
publishProgress(message);
}
});
mTcpClient.run();
return null;
}
protected void onProgressUpdate(String... values)
{
super.onProgressUpdate(values);
arrayList.add(values[0]);
mAdapter.notifyDataSetChanged();
}
}
}
Adapter
package com.example.myactivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.CountDownTimer;
import android.os.Handler;
//import android.graphics.Paint;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
public class MyCustomAdapter extends BaseAdapter
{
private ArrayList<String> mListItems;
private LayoutInflater mLayoutInflater;
private static Context context;
public MyCustomAdapter(Context context, ArrayList<String> arrayList)
{
mListItems = arrayList;
mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount()
{
return mListItems.size();
}
public Object getItem(int i)
{
return null;
}
public long getItemId(int i)
{
return 0;
}
public View getView(final int position, View view, ViewGroup viewGroup)
{
if (view == null)
{
view = mLayoutInflater.inflate(R.layout.list_item, null);
}
String stringItem = mListItems.get(position);
if (stringItem != null )
{
final TextView itemName = (TextView) view.findViewById(R.id.list_item_text_view);
Animation anim = new AlphaAnimation(0.0f, 1.0f);
anim.setDuration(120);
anim.setStartOffset(50);
anim.setRepeatMode(Animation.REVERSE);
anim.setRepeatCount(Animation.INFINITE);
itemName.setText(stringItem);
if(position == 1 && stringItem.equals("Zielony"))
{
itemName.setBackgroundColor(Color.GREEN);
itemName.startAnimation(anim);
itemName.setBackgroundResource(R.drawable.green);
// itemName.startAnimation(scale);
}
else if(position == 1 && stringItem.equals("Czerwony"))
{
itemName.setBackgroundColor(Color.RED);
itemName.startAnimation(anim);
itemName.setBackgroundResource(R.drawable.red);
// itemName.startAnimation(scale);
}
else if(position == 1 && stringItem.equals("Niebieski"))
{
itemName.setBackgroundColor(Color.BLUE);
itemName.startAnimation(anim);
itemName.setBackgroundResource(R.drawable.blue);
// itemName.startAnimation(scale);
}
//}
}
return view;
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFFF"
android:id="@+id/footer"
android:gravity="bottom">
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1.69"
android:cacheColorHint="#FFFFFF"
android:divider="@drawable/divider"
android:footerDividersEnabled="false"
android:headerDividersEnabled="false"
android:listSelector="@android:color/transparent"
android:smoothScrollbar="false"
android:text="Loading..."
android:textAlignment="center"
android:transcriptMode="alwaysScroll" />
<ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_weight="0.16"
android:src="@drawable/logo2" />
</LinearLayout>
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_item"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="bottom" >
<TextView
android:id="@+id/list_item_text_view"
android:layout_width="293dp"
android:layout_height="177dp"
android:layout_marginLeft="14dp"
android:layout_marginRight="7dp"
android:background="@drawable/rounded_edittext"
android:gravity="center"
android:padding="2dp"
android:shadowColor="@color/orchid1"
android:shadowDx="0"
android:shadowDy="0"
android:shadowRadius="5"
android:textAlignment="center"
android:textSize="25sp"
android:textStyle="bold" />
</LinearLayout>
Wszystko rozbija sie o kwestie odpowiednio napisanej klasy Activity, ktos ma jakies madre sugestie? Bede wdzieczny za podsuniecie pomyslow z jakimis probkami kodu bo raczej przegrzebalem caly internet i nic nie znalazlem, a kombinowalem na wiele sposobow.
A, jest jeszcze klasa odpowiedzialna za laczenie sie z serwerem ale z oczywistych powodow nie bede jej wrzucal :)