0

I have created an application having tab activity which in turn has 5 different list activities in which the options menu is there. Till now it was working fine but since i've added asyncTask the Options Menu does not work at first instance but when i switch the tabs and come back to my first tab then only the options menu opens on click.

Code

public class TopNewsActivity extends ListActivity {

public static final String LOG_TAG = "Infra";
private ProgressDialog progressDialog;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listplaceholder);
    new BackgroundAsyncTask().execute();
}

public class BackgroundAsyncTask extends AsyncTask<String, Integer, ArrayList<HashMap<String, String>>> {

    @Override
    protected void onPreExecute() {
        progressDialog = new ProgressDialog(TopNewsGroup.group);
        progressDialog.setCancelable(true);
        progressDialog.setMessage("Loading...");
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressDialog.setProgress(0);
        progressDialog.show();
    }

    @Override
    protected ArrayList<HashMap<String, String>> doInBackground(String... paths) {

        ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();

        String xml = XMLfunctions.getTopNewsXML();
        Document doc = XMLfunctions.XMLfromString(xml);

        int numResults = XMLfunctions.numResults(doc);
        Log.d(LOG_TAG, "Number of Results: " + numResults);
        if ((numResults <= 0)) {
            Toast.makeText(TopNewsActivity.this, "No Result Found",Toast.LENGTH_LONG).show();
            return null;
        }

        NodeList nodes = doc.getElementsByTagName("result");

        for (int i = 0; i < nodes.getLength(); i++) {
            HashMap<String, String> map = new HashMap<String, String>();

            Element e = (Element) nodes.item(i);
            map.put("id", XMLfunctions.getValue(e, "id"));
            map.put("title", XMLfunctions.getValue(e, "title"));
            mylist.add(map);
        }
        return mylist;
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
    }

    protected void onPostExecute(ArrayList<HashMap<String, String>> result) {

        ListAdapter adapter = new SimpleAdapter(TopNewsActivity.this, result, R.layout.list_item, new String[] { "title" }, new int[] { R.id.item_title });
        setListAdapter(adapter);
        progressDialog.dismiss();

        final ListView lv = getListView();

        lv.setTextFilterEnabled(true);  
        lv.setOnItemClickListener(new OnItemClickListener() {
            @SuppressWarnings("unchecked")
            @Override
            public void onItemClick(AdapterView<?> a, View view, final int position, long id) {

                HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);

                Intent i = new Intent(TopNewsActivity.this, NewsDetails.class);
                i.putExtra("content_id", o.get("id"));
                i.putExtra("title", o.get("title"));
                i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                View v = TopNewsGroup.group.getLocalActivityManager().startActivity("ShowNews", i).getDecorView();

                // Again, replace the view
                TopNewsGroup.group.setContentView(v);
            }
        });
    }
}

public class MySimpleAdapter extends SimpleAdapter {
    public MySimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
        super(context, data, resource, from, to);
        // TODO Auto-generated constructor stub
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.optionsmenu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item){

    switch (item.getItemId()){

        case R.id.refresh:
                startActivity(new Intent(this, TopNewsGroup.class));
                return true;

        case R.id.search:
                startActivity(new Intent(this, SearchActivity.class));
                return true;

        case R.id.info:
                startActivity(new Intent(this, TopNewsGroup.class));
                return true;

        case R.id.exit:
                finish();
                return true;
    }
  return false;
}

}

Please help.

ReNa
  • 1,114
  • 6
  • 19
  • 37
  • please share the source of your `AsyncTask` implementation and the snippet calling it, to have a better understanding of the problem you are facing. – rekaszeru Apr 30 '11 at 11:43
  • @rekaszeru : i've added the code, please have a look – ReNa Apr 30 '11 at 11:49
  • I've even tried your code, because nothing seamed wrong (except the progress dialog instantiation (I've changed that to `new ProgressDialog(TopNewsActivity.this);`, it works fine. But I also removed/changed the parts where you reference this `TopNewsGroup`, since I have no idea what that is, or what its `group` member/inner class is. The options menu shows up on each tab. So your problem might in that `TopNewsGroup` class. Could you tell me what the last two lines in your `onItemClick` method are supposed to do? Are you trying to start a new activity, or to change the selected tab? thank you! – rekaszeru Apr 30 '11 at 13:35
  • @rekaszeru: i use 'ActivityGroup' so i can open the onClick link in the same tab. This 'TopNewsGroup' extends the ActivityGroup. As for last two lines in the onItemClick, yes i'm starting a new activity. – ReNa May 02 '11 at 04:33

1 Answers1

0

As i use ActivityGroup i needed to override the following functions to display the optionsmenu

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    return this.getCurrentActivity().onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    return this.getCurrentActivity().onOptionsItemSelected(item);
}
ReNa
  • 1,114
  • 6
  • 19
  • 37