Question

I am using Tabwidget, Tab are implemented in same way which shows in tutorial

"MainActivity -> Activity1 -> Activity2(given Image)"

view for the current activity

Now clicking on the spinner gives

 android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@44eb8748 is not valid; is your activity running?

I have tried Android Spinner Error : android.view.WindowManager$BadTokenException: Unable to add window already but that doesn't help me

I know There is something wrong with context but I can't figure out what

Hear is my Intent which starts DetailActivity

intent = new Intent(getParent(), DetailActivity.class);
TabGroupActivity parentActivity = (TabGroupActivity)getParent();
parentActivity.startChildActivity("SelectActivity", intent);

My code for the DetailActivity given bellow

@Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.package_detail);
        setUpViews();

        id = getIntent().getExtras().getInt("WEBSITE_ID");

        adapter = new KeywordAdapter(getApplicationContext(), id,
                getLNApplication().getKeyworddetail());
        listTags.setAdapter(adapter);

        spinneAdapter = new SpinnerListAdapter();
        spinnerList.setAdapter(spinneAdapter);
        spinnerList.setSelection(id, true);
        spinnerList
                .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                    public void onItemSelected(AdapterView<?> parent,
                            View view, int position, long id) {

                        // txtHeader.setText(getLNApplication().getWebsiteList()
                        // .get(position).getName());
                        adapter.forceReload();
                        adapter = new KeywordAdapter(DetailActivity.this,
                                position, getLNApplication().getKeyworddetail());
                        listTags.setAdapter(adapter);
                    }

                    public void onNothingSelected(AdapterView<?> parent) {

                    }
                });

    }

code for SpinnerAdapter

public class SpinnerListAdapter extends BaseAdapter {

        private List<ClientDetail> siteList;

        public SpinnerListAdapter() {
            siteList = getLNApplication().getWebsiteList();
        }
        
        public void forceReload() {
            notifyDataSetChanged();
            
        }

        @Override
        public int getCount() {
            return siteList.size();
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return siteList.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = convertView;
            
//          LayoutInflater inflater = (LayoutInflater) context
//              .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
//          LayoutInflater inflater = getLayoutInflater();
    
//          LayoutInflater inflater = LayoutInflater.from(DetailActivity.this.getParent());
    
            LayoutInflater inflater = LayoutInflater.from(DetailActivity.this.getParent());
                view = inflater.inflate(R.layout.spinner_item_display, null);
                TextView websiteName = (TextView) view.findViewById(R.id.spinnerItem);
            if (siteList.get(position).getName() != null) {
                websiteName.setText(siteList.get(position).getName());
                websiteName.setTextColor(0xFF000000);
            }
            return view;
        }

        @Override
        public View getDropDownView(int position, View convertView, ViewGroup parent) {
            View view = convertView;
            
//          LayoutInflater inflater = (LayoutInflater) context
//                  .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            
//          LayoutInflater inflater = getLayoutInflater();
            
//          LayoutInflater inflater = LayoutInflater.from(DetailActivity.this.getParent());
            
            LayoutInflater inflater = LayoutInflater.from(DetailActivity.this.getParent());
                view = inflater.inflate(R.layout.spinner_dropdown_display, null);
                TextView websiteName = (TextView) view.findViewById(R.id.spinnerDropDownItem);
            if (siteList.get(position).getName() != null) {
                websiteName.setText(siteList.get(position).getName());
                websiteName.setTextColor(0xFF000000);
            }
            return view;
        }
    }

Am i doing anything wrong?

please help me with... Thank you so much

Was it helpful?

Solution

pass

YourActivty.this.getParent()

as Context to the Spinner.

For more information see here and here

OTHER TIPS

In Tab activity if you are giving any alert dialog then in that case you have set context of the tab activity & not the current activity object.

instead of

adapter = new KeywordAdapter(getApplicationContext(),id,getLNApplication().getKeyworddetail());
listTags.setAdapter(adapter);

use the following

adapter = new KeywordAdapter(Tabs.ctx,id,getLNApplication().getKeyworddetail());
listTags.setAdapter(adapter);

where Tabs.ctx is the context of tab activity & that is static variable.

In TabWidget also using this code you can solved this error

View view = LayoutInflater.from(this.getParent()).inflate(R.layout.package_detail, null);
this.setContentView(view); 
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top