将图像添加到gridview中的第一个单元格

时间:2016-02-17 07:21:22

标签: android android-gridview pojo

我有一个gridview,它使用pojo显示来自web服务的图像和文本。我想在所有其他图像之前添加图像(没有文本)(作为第1项)。即使没有来自Web服务的图像,即服务器数据库没有图像,该图像也应该可用。

GridView Adapter

public class GridViewAdapter extends ArrayAdapter<GridItem> {

    private Context mContext;
    private int resource;
    private ArrayList<GridItem> mGridData = new ArrayList<GridItem>();

    public GridViewAdapter(Context mContext, int resource, ArrayList<GridItem> mGridData) {
        super(mContext, resource, mGridData);
        this.resource = resource;
        this.mContext = mContext;
        this.mGridData = mGridData;
    }

    public void setGridData(ArrayList<GridItem> mGridData) {
        this.mGridData = mGridData;
        notifyDataSetChanged();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        ViewHolder holder = null;
        if (v == null) {

            LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
            v = inflater.inflate(resource, parent, false);
            holder = new ViewHolder();

            holder.image = (ImageView) v.findViewById(R.id.item_image);
            holder.date = (TextView) v.findViewById(R.id.item_date);
            holder.month = (TextView) v.findViewById(R.id.item_month);

            v.setTag(holder);
        } else {
            holder = (ViewHolder) v.getTag();

        }

        GridItem item = mGridData.get(position);

        Picasso
                .with(mContext)
                .load(item.getImage())
                .placeholder(R.drawable.placeholder)
                .fit()
                .into(holder.image);

        holder.date.setText(item.getDate());
        holder.month.setText(item.getMonth());

        return v;
    }

    class ViewHolder {
        ImageView image;
        TextView date;
        TextView month;
    }

}
POJO

public class GridItem {

    private String textDateUrls, textMonthUrls;
    private String imageUrls;

    public GridItem() {
        super();
    }

    public String getImage() {
        return imageUrls;
    }

    public void setImage(String imageUrls) {
        this.imageUrls = imageUrls;
    }

    public String getDate() {
        return textDateUrls;
    }

    public void setDate(String textDateUrls) {
        this.textDateUrls = textDateUrls;
    }

    public String getMonth() {
        return textMonthUrls;
    }

    public void setMonth(String textMonthUrls) {
        this.textMonthUrls = textMonthUrls;
    }

}
Main Activity

public class MainActivity extends AppCompatActivity {

    private GridView mGridView;
    private GridItem newItem;
    private GridViewAdapter mGridAdapter;
    private ArrayList<GridItem> mGridData;
    public static final String KEY_USERID = "user_id";
    private static final String REGISTER_URL = "http://staging.techunits.com/android_login_api/Services.php?action=fetchUserLog";


    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mGridView = (GridView)findViewById(R.id.gridView);
        registerUser();

        mGridData = new ArrayList<>();
        mGridAdapter = new GridViewAdapter(this, R.layout.profile_gridview_item, mGridData);
        mGridView.setAdapter(mGridAdapter);
        newItem = new GridItem();
        String imageUri = "drawable://" + R.mipmap.ic_add;
        //mGridData.add(0, newItem);


    }


    private void registerUser(){

        StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {

                        try {
                            JSONObject jObj = new JSONObject(response);
                            String status = jObj.getString("status");

                            // Now check status value
                            if (status.equals("0")) {

                                Toast.makeText(getApplicationContext(), "There was some error! Please try again.", Toast.LENGTH_LONG).show();

                            }else if(status.equals("1")){

                                mGridAdapter.setGridData(mGridData);

                                JSONArray result = jObj.getJSONArray("results");
                                GridItem item;
                                for(int i = 0 ; i <result.length() ; i++){
                                    JSONObject json_data = result.getJSONObject(i);

                                    String image = json_data.getString("images");
                                    String date = json_data.getString("date");

                                    item = new GridItem();
                                    item.setImage(image);
                                    item.setDate(date);
                                    mGridData.add(item);
                                }





                            } else {
                                // Error in login. Get the error message
                                String errorMsg = jObj.getString("error_msg");
                                Toast.makeText(getApplicationContext(), errorMsg, Toast.LENGTH_LONG).show();
                            }
                        } catch (JSONException e) {
                            // JSON error
                            e.printStackTrace();
                            Toast.makeText(getApplicationContext(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show();
                        }



                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(getApplicationContext(), error.toString(), Toast.LENGTH_LONG).show();
                    }
                }){
            @Override
            protected Map<String,String> getParams(){
                Map<String,String> params = new HashMap<String, String>();
                params.put(KEY_USERID, "21");
                return params;
            }

        };

        RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
        requestQueue.add(stringRequest);
    }




}

1 个答案:

答案 0 :(得分:0)

实现这一目标很简单。像这样创建一个虚拟GridItem:

String myPermanentUri = "your_uri_here";
GridItem myPermanentGridItem = new GridItem();
myPermanentGridItem.setImage(myPermanentUri);
//Initialize other properties as well
myPermanentGridItem.setDate("");
myPermanentGridItem.setMonth("");

现在将此添加到您的列表中,无论您是否从服务器获取任何信息。

ArrayList<GridItem> mGridItems = getFromServer(); //Just modify the implementation as per your code
if(mGridItems == null){
  mGridItems = new ArrayList<>();
}
mGridItems.add(0, myPermanentGridItem);

现在将其传递给您的适配器。 如果您有任何疑问,请与我们联系。

<强>更新

如果position == 0,您可以将getView方法更改为使用其他布局。 e.g:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    ViewHolder holder = null;
    if (v == null) {

        LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();

        if(position == 0){
          resource = R.layout.my_permanent_item_layout;
        }

        v = inflater.inflate(resource, parent, false);
        holder = new ViewHolder();

        //Modify this code accordingly
        holder.image = (ImageView) v.findViewById(R.id.item_image);
        holder.date = (TextView) v.findViewById(R.id.item_date);
        holder.month = (TextView) v.findViewById(R.id.item_month);

        v.setTag(holder);
    } else {
        holder = (ViewHolder) v.getTag();
    }

    //Rest of the code

更新2

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    ViewHolder holder = null;
    if (v == null) {

        LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();

        v = inflater.inflate(resource, parent, false);
        holder = new ViewHolder();

        holder.image = (ImageView) v.findViewById(R.id.item_image);
        holder.date = (TextView) v.findViewById(R.id.item_date);
        holder.month = (TextView) v.findViewById(R.id.item_month);

        v.setTag(holder);
    } else {
        holder = (ViewHolder) v.getTag();
    }

    //Rest of the code
    if(position == 0){
         holder.date.setVisibility(View.GONE);
         holder.month.setVisibility(View.GONE);
    }else{
         holder.date.setVisibility(View.VISIBLE);
         holder.month.setVisibility(View.VISIBLE);
         //Set the values:
         holder.date.setText("your_value");
         holder.month.setText("your_value");
    }
相关问题