Reputation: 2286
I have created a gridview with both image and text in it. Now i want to display only Image when text is empty or null. That is show image when text is empty or "" and hide image when text is present.
Here is my code in fragment ...
public class fragment_detail_both extends Fragment {
GridView mGridView;
ProgressBar progress;
List<SampleTry> rowItems;
public static final String[] web = new String[]{
"Pinterest",
"Quora",
"Twitter",
"Vimeo msndjkcns nzcjkxns nkjcsns",
"WordPress",
"Youtube",
"Stumbleupon",
"SoundCloud msnd hekko sdjkl kdksdon",
"Reddit",
"Blogger",
"Github",
"Instagram",
"Blogger ",
"Facebook",
"Flickr",
"Pinterest",
"Quora",
"Twitter",
"Vimeo",
"WordPress",
"Youtube",
"Stumbleupon",
"SoundCloud",
"Reddit"
};
public static final Integer[] images = {
R.drawable.image1,
R.drawable.image2,
R.drawable.image3,
R.drawable.image4,
R.drawable.image5,
R.drawable.image6,
R.drawable.image7,
R.drawable.image8,
R.drawable.image9,
R.drawable.image10,
R.drawable.image11,
R.drawable.image12,
R.drawable.image13,
R.drawable.image14,
R.drawable.image15,
R.drawable.image1,
R.drawable.image2,
R.drawable.image3,
R.drawable.image4,
R.drawable.image5,
R.drawable.image6,
R.drawable.image7,
R.drawable.image8,
R.drawable.image9,
R.drawable.image10,
R.drawable.image11,
R.drawable.image12,
R.drawable.image13
};
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_detail_both, container, false);
rowItems = new ArrayList<>();
for (int i = 0; i < web.length; i++) {
SampleTry item = new SampleTry(web[i], images[i]);
rowItems.add(item);
}
mGridView = (GridView) view.findViewById(R.id.grid_view);
Detail_adaptor adapter = new Detail_adaptor(getActivity(), rowItems);
mGridView.setAdapter(adapter);
progress = (ProgressBar) getActivity().findViewById(R.id.detail_progress);
progress.setVisibility(View.INVISIBLE);
return view;
}
}
and Detail_adapter is
public class Detail_adaptor extends BaseAdapter {
Context mContext;
List<SampleTry> rowItems;
public Detail_adaptor(Context context, List<SampleTry> items) {
mContext = context;
this.rowItems = items;
}
@Override
public int getCount() {
return rowItems.size();
}
@Override
public Object getItem(int position) {
return rowItems.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
private class MyViewHolder {
TextView textView;
ImageView imageView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyViewHolder holder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.single_layout, parent, false);
holder = new MyViewHolder();
holder.textView = (TextView) convertView.findViewById(R.id.grid_text);
holder.imageView = (ImageView) convertView.findViewById(R.id.grid_image);
convertView.setTag(holder);
} else {
holder = (MyViewHolder) convertView.getTag();
}
SampleTry sampleTry = (SampleTry) getItem(position);
holder.textView.setText(sampleTry.getWeb());
holder.imageView.setImageResource(sampleTry.getImagesId());
return convertView;
}
}
and SampleTry class is
public class SampleTry {
String web;
int imagesId;
public SampleTry(String web, int imagesId) {
this.web = web;
this.imagesId = imagesId;
}
public String getWeb() {
return web;
}
public void setWeb(String web) {
this.web = web;
}
public int getImagesId() {
return imagesId;
}
public void setImagesId(int imagesId) {
this.imagesId = imagesId;
}
@Override
public String toString() {
return web;
}
}
Upvotes: 0
Views: 83
Reputation: 3584
You can try like this ..
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyViewHolder holder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.single_layout, parent, false);
holder = new MyViewHolder();
holder.textView = (TextView) convertView.findViewById(R.id.grid_text);
holder.imageView = (ImageView) convertView.findViewById(R.id.grid_image);
convertView.setTag(holder);
} else {
holder = (MyViewHolder) convertView.getTag();
}
SampleTry sampleTry = (SampleTry) getItem(position);
if (sampleTry.getWeb() != null && ! sampleTry.getWeb().isEmpty()) {
holder.textView.setText(sampleTry.getWeb());
holder.textView.setVisibility(View.VISIBLE);
holder.imageView.setVisibility(View.GONE);
} else {
holder.imageView.setImageResource(sampleTry.getImagesId());
holder.imageView.setVisibility(View.VISIBLE);
holder.textView.setVisibility(View.GONE);
}
return convertView;
}
Hope it will be useful for you.
Upvotes: 2
Reputation: 3906
inside getView() function you have to use something like this
...
if(sampleTry.getWeb().isEmpty() || sampleTry.getWeb() == null){
holder.imageView.setImageResource(sampleTry.getImagesId());
holder.imageView.setVisibility(View.VISIBLE);
holder.textView.setVisibility(View.GONE);
}else{
holder.textView.setText(sampleTry.getWeb());
holder.imageView.setVisibility(View.GONE);
holder.textView.setVisibility(View.VISIBLE);
}
...
instead of
holder.textView.setText(sampleTry.getWeb());
holder.imageView.setImageResource(sampleTry.getImagesId());
Have fun.
Upvotes: 1