0

I use PulltoRefresh listview and I use 3 layouts. 1. Gaming Layout(Should be inflated when linkedlist item starts with "gm") 2. Adlayout(Should be inflated when linkedlist item starts with "ad") 3.Normal Listview layout(in all other cases) Here is the code

mListItems = new LinkedList<String>();
mListItems.add(0,"hi1");
        mListItems.add(1,"hi2");
        mListItems.add(2,"gm");
        mListItems.add(3,"hi3");
        mListItems.add(4,"ad");
        mListItems.add(5,"hi4");


((PullToRefreshListView) getListView())
                .setOnRefreshListener(new OnRefreshListener() {
                    @Override
                    public void onRefresh() {
                        // Do work to refresh the list here.
                        new GetDataTask().execute();
                    }
                });

private class GetDataTask extends AsyncTask<Void, Void, String[]> {

        @Override
        protected String[] doInBackground(Void... params) {
            // Simulates a background job.
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                ;
            }
            return mStrings;
        }

        @Override
        protected void onPostExecute(String[] result) {

            // mListItems.addFirst("Added after refresh...");
//          parseJson("IndigoFM_06212013.json");
            mListItems.addFirst("how are you");
            mListItems.addFirst("ad");
            mListItems.addFirst("gm");
            mListItems.addFirst("the end");

            // Call onRefreshComplete when the list has been refreshed.
            ((PullToRefreshListView) getListView()).onRefreshComplete();

            super.onPostExecute(result);
        }
    }

Here is the adapter code

private class basicListAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            // TODO Auto-generated method stub

            return mListItems.size();
        }

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

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            View v = convertView;
            if (v == null) {
                LayoutInflater inflater = LayoutInflater
                        .from(getApplicationContext());

                if ((mListItems.get(position).startsWith("gm"))) {

                    v = inflater.inflate(R.layout.gaminglayout, null);
                } else if ((mListItems.get(position).startsWith("ad"))) {

                    v = inflater.inflate(R.layout.adlayout, null);
                } else if(!(mListItems.get(position).startsWith("gm")) && !(mListItems.get(position).startsWith("ad")))  {
                    v = inflater.inflate(R.layout.listinflate, null);
                }
                viewHolder holder = new viewHolder();
                adViewHolder adHolder = new adViewHolder();
                gamingViewHolder gamingHolder = new gamingViewHolder();
                 if ((mListItems.get(position).startsWith("ad"))) {
                    adHolder.adDetails = (TextView) v.findViewById(R.id.adText);
                    v.setTag(adHolder);
                } else if ((mListItems.get(position).startsWith("gm"))) {
                    gamingHolder.gamingButton = (Button) v
                            .findViewById(R.id.gamingButton);
                    gamingHolder.gamingButton .setOnClickListener(mOngamingButtonClickListener);
                    v.setTag(gamingHolder);
                }else  if(!(mListItems.get(position).startsWith("gm")) && !(mListItems.get(position).startsWith("ad"))){
                    holder.rjName = (TextView) v.findViewById(R.id.rjName);
                    holder.textViewName = (TextView) v
                            .findViewById(R.id.textViewName);
                    holder.likeLayout = (LinearLayout) v
                            .findViewById(R.id.likeLayout);
                    holder.commentLayout = (LinearLayout) v
                            .findViewById(R.id.commentLayout);
                    holder.likeLayout
                            .setOnClickListener(mOnLikeLayoutClickListener);
                    holder.commentLayout
                            .setOnClickListener(mOnCommentLayoutClickListener);
                    v.setTag(holder);
                } 
            }

            if (mListItems.get(position) != null) {

                // if(!(mListItems.get(position).startsWith("1"))){
                if (!(v.getTag() instanceof adViewHolder)) {
                    if(!(v.getTag() instanceof gamingViewHolder)){
                    viewHolder holder = (viewHolder) v.getTag();
                    holder.textViewName.setText(mListItems.get(position));
                    }
                }
            }

            return v;

        }

    }

Now the issue is that after I pull to refresh, The entries which start with "gm" are being shown in normal listview layout but not the gaming layout. In a way to say incorrect layout is being inflated

user2488310
  • 35
  • 1
  • 7

0 Answers0