Несоответствие Android в Listiew нескольких макетов инфляции

Я использую PulltoRefresh listview, и я использую 3 макета. 1. Игровой макет (должен быть раздут, когда элемент связанного списка начинается с "gm") 2. Adlayout(Должен быть раздут, когда элемент связанного списка начинается с "объявления") 3.Нормальный макет списка (во всех остальных случаях) Вот код

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);
        }
    }

Вот код адаптера

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;

        }

    }

Теперь проблема в том, что после того, как я обновляю, записи, начинающиеся с "gm", отображаются в обычном макете списка, но не в игровом макете. В некотором смысле, неправильный макет раздувается

0 ответов

Другие вопросы по тегам