自定义适配器未填充 GridView

Custom Adapter not populating GridView

我制作了一个自定义适配器来填充我的 gridView。我正在做的是我试图用两个不同的数据(也是自定义的)填充 gridview,它们是:电影和 FavouriteMovies。当使用 Movies 更新 dridview 时,它会更新得很好,但当它使用 FavouriteMovies 时,它不会更新。我将 FavouriteMovies 存储在 sqlite 数据库中,然后完美地查询 return a cursor.the 数据 returns 并且没有错误。主要问题是我的 MoviesAdapter。在此内部,当我将 Movies 添加到适配器时,它会添加到 MoviesAdapter 内的列表中,并且效果很好,但是当我将 FavouriteMovies 添加到适配器时,它不会将其添加到 MoviesAdapter 内的 favouriteList 中,并且其大小始终为零。 请帮忙!! 这是我的 MoviesAdapter: 包裹 com.akshitjain.popularmovies;

import android.content.Context;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;

import com.squareup.picasso.Picasso;

import java.util.ArrayList;
import java.util.List;


public class MoviesAdapter extends BaseAdapter {


private Context mContext;
List<Movies> list = new ArrayList<>();
List<FavouriteMovies> favouriteList = new ArrayList<>();

public MoviesAdapter(Context c) {
    this.mContext = c;
}

@Override
public int getCount() {
    if (list != null)
        return list.size();
    else
        return favouriteList.size();
}

@Override
public Object getItem(int position) {
    if (list != null)
        return list.get(position);
    else
        return favouriteList.get(position);
}

@Override
public long getItemId(int position) {
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView =     LayoutInflater.from(mContext).inflate(R.layout.grid_item_movies, parent, false);
    }

    ImageView moviePoster = (ImageView) convertView.findViewById(R.id.grid_item_movie_image);
    if (list != null) {
        Movies movies = list.get(position);
        String posterPath = movies.posterPath;
        final String POSTER_FINAL_URL = Constants.IMAGE_BASE_URL +     Constants.POSTER_SIZE_LARGE + posterPath;

            Picasso.with(mContext).load(POSTER_FINAL_URL.trim()).into(moviePoster);
    } else {
        FavouriteMovies favouriteMovies = favouriteList.get(position);
        byte[] bb = favouriteMovies.posterImage;
        moviePoster.setImageBitmap(BitmapFactory.decodeByteArray(bb, 0,       bb.length));
    }

    return convertView;
}

public void add(Movies movies) {
    list.add(movies);
}

public void offlineAdd(FavouriteMovies favouriteMovies) {
    favouriteList.add(favouriteMovies);
}

public void clear() {
    list.clear();
}

}

这里是我添加到适配器的地方:

          @Override
    protected void     onPostExecute(Movies[] strings) {
    if (strings != null) {
        mMoviesAdapter.clear();
        for (Movies moviesStr : strings) {
            mMoviesAdapter.add(moviesStr);
        }
    }else if(mFavouriteMovies != null){
        mMoviesAdapter.clear();
        for(FavouriteMovies     favouriteMoviesStr : mFavouriteMovies){
              mMoviesAdapter.offlineAdd(favouriteMoviesStr);
        }
    }
    Log.v("FetchMoviesTask","Count :" +     mMoviesAdapter.getItem(0));
        mMoviesAdapter.notifyDataSetChanged();
}

很抱歉我的粗话。

如果你设置你最喜欢的电影,你将永远拥有count == 0

List<Movies> list = new ArrayList<>();

@Override
public int getCount() {
    if (list != null)
        return list.size();
    else
        return favouriteList.size();
}

这将始终 return 0 的计数,因为列表永远不会是 null。你最喜欢的电影被忽略了。

解决方案

  • 由于您只显示 电影 收藏夹,因此您应该使用 2 个适配器。如果你不想这样做,
  • 使用 boolean。只需将 showFavorites 设置为 true,然后显示它们。或者,如果您保留空值检查,
  • 设置显示收藏时List<Movie> = null;,同样有效

使用以下适配器:-

boolean[] CheckedItem_Adap;
ImageLoader imgload;
int headercount = 0, childCount;
LinkedList<HashMap<String, String>> allData;
LinkedList<HashMap<String, String>> temp_Header;
LinkedList<HashMap<String, String>> temp_child = new LinkedList<HashMap<String, String>>();
ArrayList<String> header;
ArrayList<String> childCount1;
private int[] mSectionIndices;
private String[] mSectionLetters;
private LayoutInflater inflater;
private Activity context;

public Adapter_UserTimeLine_StickyGrid(Activity context1, LinkedList<HashMap<String, String>> list, boolean[] checkedItems, ArrayList<String> childCountArray, ArrayList<String> headerarray, LinkedList<HashMap<String, String>> temp_Headers_LinkList) {

    this.CheckedItem_Adap = checkedItems;
    allData = list;
    inflater = LayoutInflater.from(context1);
    imgload = new ImageLoader(context1);
    childCount1 = childCountArray;
    header = headerarray;
    temp_Header = temp_Headers_LinkList;
    context = context1;
}

@Override
public int getCount() {
    return allData.size();
}

@Override
public Object getItem(int position) {
    return allData.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    final ViewHolder holder = new ViewHolder();
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.sticky_listitems, parent, false);
    }


    holder.ivPostPic_Sticky = (ImageView) convertView.findViewById(R.id.ivPostPic_Sticky);
    holder.ivSelectedToDelete_Sticky = (ImageView) convertView.findViewById(R.id.ivSelectedToDelete_Sticky);
    holder.rlPostSticky_ManageSticky = (RelativeLayout) convertView.findViewById(R.id.rlPostSticky_ManageSticky);

    if (CheckedItem_Adap[position] == true) {
        holder.ivSelectedToDelete_Sticky.setVisibility(View.VISIBLE);
    } else if (CheckedItem_Adap[position] == false) {
        holder.ivSelectedToDelete_Sticky.setVisibility(View.GONE);
    }

    if (allData.get(position).get("media_type").equals("text")) {
        holder.ivPostPic_Sticky.setImageResource(R.drawable.line_small);
    } else {
        imgload.DisplayImage(Constants.Imge_baseUrl + allData.get(position).get("video_thumb"),
        holder.ivPostPic_Sticky);
    }


    holder.rlPostSticky_ManageSticky.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (UserTimeLine_Activity.isDeleteSelected) {
                if (CheckedItem_Adap[position] == false) {
                    UserTimeLine_Activity.Selected_PostIds.add(allData.get(position).get("post_id"));
                    holder.ivSelectedToDelete_Sticky.setVisibility(View.VISIBLE);
                    CheckedItem_Adap[position] = true;
                } else {
                    UserTimeLine_Activity.Selected_PostIds.remove(allData.get(position).get("post_id"));
                    holder.ivSelectedToDelete_Sticky.setVisibility(View.GONE);
                    CheckedItem_Adap[position] = false;
                }

                for (int i = 0; i < UserTimeLine_Activity.Selected_PostIds.size(); i++) {
                    Log.e("postid", i + "-" + UserTimeLine_Activity.Selected_PostIds.get(i) + "");

                }
                if (UserTimeLine_Activity.Selected_PostIds.get(0).equals(UserTimeLine_Activity.Selected_PostIds.get(0))) { }
            } else {
                String media_type = allData.get(position).get("media_type");
                String post_id = allData.get(position).get("post_id");
                Intent in = new Intent(context, PostDetails_UserOwn_TimeLIne_Activity.class);
                in.putExtra("media_type", media_type);
                in.putExtra("post_id", post_id);
                in.putExtra("position", String.valueOf(position));
                in.putExtra("post_User_Name", allData.get(position).get("post_User_Name"));
                context.startActivity(in);
            }
        }
    });

    return convertView;
}

@Override
public int getCountForHeader(int i) {
    int c = Integer.valueOf(childCount1.get(i));
    return c;
}

@Override
public int getNumHeaders() {
    return temp_Header.size();
}

@Override
public View getHeaderView(int position, View convertView, ViewGroup parent) {
    HeaderViewHolder holder = new HeaderViewHolder();
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.headersticky_managepost, parent, false);
    }

    temp_Header.get(position).get("post_datetime");

    TextView tvDate_Sticky = (TextView) convertView.findViewById(R.id.tvDate_Sticky);
    for (int i = 0; i < temp_Header.size(); i++) {
    }

    String Date = temp_Header.get(position).get("post_datetime");
    String FormatedDate = parseDateToddMMyyyy(Date);
    tvDate_Sticky.setText(FormatedDate);
    return convertView;
}

public String parseDateToddMMyyyy(String time) {
    String inputPattern = "yyyy-MM-dd";
    String outputPattern = "MMM-dd-yyyy";
    SimpleDateFormat inputFormat = new SimpleDateFormat(inputPattern);
    SimpleDateFormat outputFormat = new SimpleDateFormat(outputPattern);

    Date date = null;
    String str = null;

    try {
        date = inputFormat.parse(time);
        str = outputFormat.format(date);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return str;
}

class HeaderViewHolder {
    TextView tvDate_Sticky;
}

class ViewHolder {
    ImageView ivPostPic_Sticky, ivSelectedToDelete_Sticky;
    RelativeLayout rlPostSticky_ManageSticky;
}
}