Несоответствие 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", отображаются в обычном макете списка, но не в игровом макете. В некотором смысле, неправильный макет раздувается