Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8039309
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 5, 20262026-06-05T03:31:52+00:00 2026-06-05T03:31:52+00:00

In a TabActivity, one TabSpec consists of a few TextViews and below, a ListView

  • 0

In a TabActivity, one TabSpec consists of a few TextViews and below, a ListView element. I would like to populate the ListView with an AsyncTask from an external database. In all other parts of my app with ‘standard’ layouts, this works fine, but here it seems that the nested ListView creates a problem.
If I load my data – supposedly into the ListView of the TabSpec – the app instead creates a new ‘window’ on top of the TabActivity, so the “back” button brings me back to the (empty) TabSpec.

Here is my code:

TabHost (venueview.xml):

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TabWidget
        android:id="@android:id/tabs"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
</LinearLayout>
</TabHost>

TabSpec with the ListView (venueviewreviews.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/txtvname_r"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="txtvname" />
<RatingBar
    android:id="@+id/ratingBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
<Button
    android:id="@+id/btnRatingSubmit"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
<ListView
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
</LinearLayout>

Here is the code creating the TabHost:

public class VViewActivity extends TabActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.venueview);

    TabHost tabHost = getTabHost();

    TabSpec vinfospec = tabHost.newTabSpec("Info");
    vinfospec.setIndicator("Info",
            getResources().getDrawable(R.drawable.ic_info));
    Intent vinfoIntent = new Intent(this, VViewBasicActivity.class);
    vinfospec.setContent(vinfoIntent);

    TabSpec vmapspec = tabHost.newTabSpec("Map");
    vmapspec.setIndicator("Location",
            getResources().getDrawable(R.drawable.ic_map));
    Intent vmapIntent = new Intent(this, VViewMapActivity.class);
    vmapspec.setContent(vmapIntent);

    TabSpec vreviewsspec = tabHost.newTabSpec("Reviews");
    vreviewsspec.setIndicator("Reviews",
            getResources().getDrawable(R.drawable.ic_review));
    Intent vreviewsIntent = new Intent(this, VViewReviewsActivity.class);
    vreviewsspec.setContent(vreviewsIntent);

    // Adding all TabSpec to the TabHost for display
    tabHost.addTab(vinfospec);
    tabHost.addTab(vmapspec);
    tabHost.addTab(vreviewsspec);

}

}

And here comes the part where I think there must be something the source of my problem (pun intended) – the code behind setting up the TabSpec with the ListView to be filled and displayed properly:

public class VViewReviewsActivity extends Activity {
private RatingBar ratingBar;
private TextView txtvname_r;
private Button btnRatingSubmit;
private ListView lvComments;
private static ListAdapter laComments;
String vid;
String vname;
String rating;

private static ArrayList<HashMap<String, String>> commentsList;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.venueviewreviews);

    ListView lvComments = (ListView)findViewById(R.id.list);

    Intent lc = new Intent(this, GetVenueComments.class);
    lc.putExtra("vid",vid);
    startActivity(lc);

}


public static class GetVenueComments extends ListActivity {
    JSONParser jParser = new JSONParser();
    JSONArray comments = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.venueviewreviews);

        commentsList = new ArrayList<HashMap<String, String>>();
        new LoadAllVenues().execute();

    }

    /**
     * Background Async Task to Load all venues via HTTP Request
     * */
    class LoadAllVenues extends AsyncTask<String, String, String> {

        protected String doInBackground(String... args) {
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            Intent iCurr = getIntent();
            JSONObject json = jParser.makeHttpRequest(
                    getString(R.string.urlVenueComments), "GET", params);

            try {
                // Checking for SUCCESS TAG
                int success = json.getInt(TAG_SUCCESS);
                if (success == 1) {
                    // products found

                    // Getting Array of Products
                    comments = json.getJSONArray(TAG_COMMENTS);

                    // looping through All Products
                    for (int i = 0; i < comments.length(); i++) {
                        JSONObject c = comments.getJSONObject(i);


                        // creating new HashMap
                        HashMap<String, String> hashmap = new HashMap<String, String>();

                        // adding each child node to HashMap key => value
                        hashmap.put(TAG_COMMENTS_ID, cid);
                        hashmap.put(TAG_COMMENTS_COMMENT, ctext);

                        // adding HashList to ArrayList
                        commentsList.add(hashmap);
                    }
                } else {
                    // cut to save space
                }
            } catch (JSONException e) {
                // cut to save space
            }

            return null;
        }

        /**
         * After completing background task Dismiss the progress dialog
         * **/
        protected void onPostExecute(String file_url) {
            // updating UI from Background Thread
            runOnUiThread(new Runnable() {
                public void run() {
                    // Updating parsed JSON data into ListView
                    laComments = new SimpleAdapter(
                            GetVenueComments.this,
                            commentsList,
                            R.layout.commentlistitem,
                            new String[] { TAG_COMMENTS_ID,
                                                                            TAG_COMMENTS_COMMENT }, new int[] {
                                    R.id.CommentList_id,
                                                                            R.id.CommentList_comment });
                    // updating listview
                    setListAdapter(laComments);
                }
            });

        }

    }
}

}

Any idea what I have to fix to have the comment ListView display right within the TabSpec instead of in a separately opened window/activity?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-05T03:31:53+00:00Added an answer on June 5, 2026 at 3:31 am

    I think I found the solution: somehow TabHost/TabSpec handles Views very differently, so having a TextView or another element apart from the ListView that is to be filled in TabHost, messes up the context stack.

    So what I did was to refresh the variables referencing the Buttons and TextViews in an overridden onContentChanged() method, as “Chris” has explained here:

    @Override
    public void onContentChanged() {
        // refresh with current view, otherwise NullPointerException on
        // OnPostExecute() when trying to set value of the field with
        // setText()!!
        super.onContentChanged();
    
        btnRatingSubmit = (Button) VViewReviewsActivity.this
                .findViewById(R.id.btnRatingSubmit);
        txtvname_r = (TextView) VViewReviewsActivity.this
                .findViewById(R.id.txtvname_r);
        ratingBar = (RatingBar) VViewReviewsActivity.this
                .findViewById(R.id.ratingBar);
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

i have a tabActivity that hold 3 tabs. from one tab i want to
i am working on tabactivity. i wanna show my tabwidget below the tabcontent(framelayout). i
I have a TabActivity with a tab, which shows a list. I'd like to
I'm trying to insert a ListView as one of the tabs in a tabhost.
I have one form (Scroll View) in TabActivity, tabs appears on bottom of the
I have a TabActivity and inside 5 tabs with 5 activities each one. I
In my application i am having a TabActivity in which i am using One
Having some trouble passing values from one class to another. I basically have a
I have created three tabs in TabActivity onCreate . How can I hide one
In my Android app I have a TabActivity, with 3 tabs. In one of

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.