Ravikant Paudel
Ravikant Paudel

Reputation: 2286

How to display Image when Text is null or empty in GridView and viceversa?

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

Answers (2)

Arkar Aung
Arkar Aung

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

Eliasz Kubala
Eliasz Kubala

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

Related Questions