У меня есть сетка, которая отображает изображения и текст из веб-сервиса с помощью pojo. Я хочу добавить изображение (без текста) перед всеми другими изображениями (как 1-й элемент). Это изображение должно быть доступно, даже если нет изображений из веб-службы, т. Е. Если в базе данных сервера нет изображений.Добавить изображение в первую ячейку в gridview
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);
}
}
Если вы пишете код с нуля, я бы настоятельно предложил использовать «RecyclerView» вместо o f listview. Это было бы легко достичь в «RecyclerView». – Shubham
Как добавить изображение в 0 позицию в Recyclerview? @Shubham – Sam
Просьба ознакомиться с документацией «RecyclerView». Для этого вам нужно будет использовать два пользовательских представления. Предупреждение: Recycler не предоставляет прослушиватели заголовка, нижнего колонтитула и элемента. Вам нужно реализовать все это самостоятельно. Но как только вы понимаете и реализуете это в первый раз, все довольно просто. – Shubham