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