快速提问,我希望在与生成任务不同的活动中从异步任务更新列表视图。我的问题是关于在其他活动中更新适配器,我将如何访问其他活动适配器以便我可以添加到它(使用 adapter.add(item);)并通知适配器更改以更新列表其他活动 (adapter.notifyChange();) ?
这是连接任务:
公共类 ConnectionTask 扩展 AsyncTask<Context, String, Void> {
private String mText;
private Context mContext;
private int NOTIFICATION_ID = 1;
private Notification mNotification;
private NotificationManager mNotificationManager;
@SuppressWarnings("unused")
private NotificationActivity noteact = new NotificationActivity();
public ConnectionTask(Context context){
this.mContext = context;
//Get the notification manager
mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
}
@Override
protected void onPreExecute() {
Log.i("PushNote", "onPreExecute");
}
public void setmText(String mText){
this.mText = mText;
}
public String getmText(){
return mText;
}
@Override
protected Void doInBackground(Context... params) {
Socket clientSocket = null;
//Creates the is connected boolean and sets it to false
boolean connected = false;
String ipaddr = getmText();
// define a writer and a reader, so that we can interact with the
// Server
BufferedReader inFromServer = null;
InetAddress addr = null;
try {
addr = InetAddress.getByName(ipaddr);
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
publishProgress(e1.toString());
e1.printStackTrace();
}
// Dynamically find IP of current Localhost
String HostName = addr.getHostName();
int port = 6789;
try {
// Lets try and instantiate our client and define a port number.
clientSocket = new Socket(HostName, port);
// once the client is connected sets the isConnected boolean to true
connected = true;
// lets also link the writer and reader to the client.
inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
// make sure to always catch any exceptions that may occur.
} catch (UnknownHostException e) {
// always print error to "System.err"
publishProgress(e.toString());
// 2 different types of exceptions, so we want to output meaning
// information for both.
} catch (IOException e) {
publishProgress(e.toString());
}
// Boolean which indicates if the client is connected or not,
// if connected it takes in the next line of user input and returns the servers response.
while (connected) {
// Send the user message to the server
// read the reply from the server
String reply = null;
try {
reply = inFromServer.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
publishProgress("Failed to connect." );
System.exit(1);
}
if (reply != null){
// output the reply as a notification
if (isCancelled()){
break;
}
publishProgress(reply);
} else {
try {
inFromServer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
publishProgress(e.toString());
System.exit(1);
} // the reader
try {
clientSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
publishProgress(e.toString());
System.exit(1);
} // and the client socket
}
}
// always remember to close all connections.
// TODO Auto-generated method stub
return null;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
protected void onProgressUpdate(String... item) {
Notification("Push2Note: ", item[0]);
}
public void Notification(String contentTitle, String contentText) {
//Build the notification using Notification.Builder
long[] vibrate = {0,100,200,300};
PendingIntent pendingIntent;
Intent intent = new Intent();
intent.setClass(mContext,NotificationActivity.class);
pendingIntent = PendingIntent.getActivity(mContext, 0, intent, 0);
NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext)
.setSmallIcon(android.R.drawable.presence_online)
.setAutoCancel(true)
.setVibrate(vibrate)
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
.setContentIntent(pendingIntent)
.setContentTitle(contentTitle)
.setContentText(contentText);
//Get current notification
mNotification = builder.getNotification();
//Show the notification
mNotificationManager.notify(NOTIFICATION_ID, mNotification);
}
}
这是我希望填充的活动:
公共类 NotificationActivity 扩展 ListActivity {
/** Called when the activity is first created. */
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.notifications);
setListAdapter(new ArrayAdapter(this,
android.R.layout.simple_list_item_checked, new ArrayList()));
}
}
我读过类似的问题,听说过使用全局适配器,但不知道如何实现这样的事情。
这是难题的最后一块,对我的应用程序来说仍然是一个谜,对此问题的任何帮助将不胜感激。
谢谢你的时间,
祝一切顺利。