我有一个ListActivity
. 每次启动时,AsyncTask
都会运行以扫描我的 IP 地址并将结果显示在ListActivity
. 一切正常。但是,如果我创建一个选项菜单(android 2.3),那么我的 IP 地址不会显示在ListActivity
. 当AsyncTask
我单击菜单按钮时,仍然可以正常工作并且选项菜单正确显示。没有错误发生,ListActivity
只是不显示IP。这是我的代码:
public class MyIP extends ListActivity
{
ArrayList <Device> devicesList = new ArrayList<Device>();
AdapterListDevices adapter;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView listView = (ListView) findViewById(android.R.id.list);
registerForContextMenu(listView);
adapter = new AdapterListDevices(MyIP.this, R.layout.row_list_devices, devicesList);
setListAdapter(adapter);
scanMyDevice();
}
@Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo)
{
// Some code
}
@Override
public boolean onContextItemSelected(MenuItem item)
{
// Some code
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.myip_options_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
// Some code
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
// Some code
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
// Some code
}
public void updateListAdapter(Device myDevice)
{
devicesList.add(myDevice);
adapter.notifyDataSetChanged();
}
public void scanMyDevice()
{
ScanMyDeviceTask smd = new ScanMyDeviceTask(MyIP.this);
smd.execute();
}
}
这是我的 ScanMyDeviceTask:
public class ScanMyDeviceTask extends AsyncTask <Void, Void, Void>
{
Context context;
ProgressDialog progDialog;
Device myDevice;
InetAddress myAddress;
public ScanMyDeviceTask(Context context)
{
this.context = context;
progDialog = new ProgressDialog(context);
}
@Override
protected void onPreExecute()
{
progDialog.setTitle("Searching...");
progDialog.setProgressStyle(progDialog.STYLE_SPINNER);
progDialog.show();
}
@Override
protected Void doInBackground(Void... params)
{
//Scan the ip address here
}
@Override
protected void onPostExecute(Void params)
{
MyIP act = (MyIP) context;
act.updateListAdapter(myDevice);
PublicData pd = (PublicData) act.getApplication();
pd.setMyIp(myAddress.getAddress());
progDialog.dismiss();
}
}