如何与适配器共享 arraylist class
how to share arraylist with adapter class
我创建了一个数组列表,它从给定的 URL
中获取数据,现在我希望这个 ArrayList
显示在 GridView
中。我在 [=15] 中传递了它=] 但 ArrayList
显示 null.The API
响应 List
正在获取数据,因为在项目上单击它显示数据。
public ArrayList<String> images, urlResponse;
FloatingActionButton fab;
public String Data_Url = "http://gurbaaj.16mb.com/photos.php";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridView gallery = (GridView) findViewById(R.id.gridview);
fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "FAB clicked", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this, ImageCheckActivity.class);
intent.putStringArrayListExtra("stock_list", urlResponse);
startActivity(intent);
}
});
//Action On item click
gallery.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
if (null != images && !images.isEmpty())
Toast.makeText(
getApplicationContext(),
"position " + position + " " + urlResponse, Toast.LENGTH_SHORT).show();
}
});
gallery.setAdapter(new ImageAdapter(this, urlResponse));
}
@Override
protected void onStart() {
Toast.makeText(this, "On Start" , Toast.LENGTH_SHORT).show();
super.onStart();
final ProgressDialog loading = ProgressDialog.show(MainActivity.this,"Data is Loading", "Please wait...",false,false);
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Data_Url, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
loading.dismiss();
parseData(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
Toast.makeText(getApplicationContext(), "Network error", Toast.LENGTH_SHORT).show();
}
});
// Creating RequestQueue
CustomVolleyRequestQueue.getInstance(getApplicationContext()).addToRequestQueue(jsonArrayRequest);
}
private void parseData(JSONArray response) {
urlResponse = new ArrayList<>();
for (int i = 0; i < response.length(); i++) {
JSONObject jsonObject;
try {
jsonObject = response.getJSONObject(i);
String Images = jsonObject.getString("Image");
urlResponse.add(Images);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
private class ImageAdapter extends BaseAdapter {
/**
* The context.
*/
private Activity context;
ArrayList<String> urlImages;
/**
* Instantiates a new image adapter.
*
* @param localContext the local context
*/
public ImageAdapter(Activity localContext, ArrayList<String> urlImages) {
context = localContext;
images = getAllShownImagesPath(context);
this.urlImages = urlImages;
}
public int getCount() {
return urlImages.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView,
ViewGroup parent) {
ImageView picturesView;
if (convertView == null) {
picturesView = new ImageView(context);
picturesView.setScaleType(ImageView.ScaleType.FIT_CENTER);
picturesView
.setLayoutParams(new GridView.LayoutParams(270, 270));
} else {
picturesView = (ImageView) convertView;
}
try {
Glide.with(context).load(urlImages.get(position))
.placeholder(R.mipmap.ic_launcher_round).centerCrop()
.into(picturesView);
} catch (Exception e) {
e.printStackTrace();
}
return picturesView;
}
解析数据后添加此行:
gallery.setAdapter(new ImageAdapter(this, urlResponse));
像那样:
private void parseData(JSONArray response) {
urlResponse = new ArrayList<>();
for (int i = 0; i < response.length(); i++) {
JSONObject jsonObject;
try {
jsonObject = response.getJSONObject(i);
String Images = jsonObject.getString("Image");
urlResponse.add(Images);
} catch (JSONException e) {
e.printStackTrace();
}
}
gallery.setAdapter(new ImageAdapter(this, urlResponse));
}
您应该像在 ArrayList 中一样在 ImageAdapter 中创建方法(add、addAll 等),并在 ImageAdapter 中的 ArrayList 发生更改后调用 notifyDataSetChanged。
public void add(String text) {
urlImages.add(text);
notifyDataSetChanged();
}
public void addAll(List<String> text) {
urlImages.addAll(text);
notifyDataSetChanged();
}
此外,您将 null 对象作为 urlImages 传递给 ItemAdapter,您应该考虑创建构造函数,它将使用新的空列表初始化 urlImages,或者传递一个非 null 对象。
我创建了一个数组列表,它从给定的 URL
中获取数据,现在我希望这个 ArrayList
显示在 GridView
中。我在 [=15] 中传递了它=] 但 ArrayList
显示 null.The API
响应 List
正在获取数据,因为在项目上单击它显示数据。
public ArrayList<String> images, urlResponse;
FloatingActionButton fab;
public String Data_Url = "http://gurbaaj.16mb.com/photos.php";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridView gallery = (GridView) findViewById(R.id.gridview);
fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "FAB clicked", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this, ImageCheckActivity.class);
intent.putStringArrayListExtra("stock_list", urlResponse);
startActivity(intent);
}
});
//Action On item click
gallery.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
if (null != images && !images.isEmpty())
Toast.makeText(
getApplicationContext(),
"position " + position + " " + urlResponse, Toast.LENGTH_SHORT).show();
}
});
gallery.setAdapter(new ImageAdapter(this, urlResponse));
}
@Override
protected void onStart() {
Toast.makeText(this, "On Start" , Toast.LENGTH_SHORT).show();
super.onStart();
final ProgressDialog loading = ProgressDialog.show(MainActivity.this,"Data is Loading", "Please wait...",false,false);
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Data_Url, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
loading.dismiss();
parseData(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
Toast.makeText(getApplicationContext(), "Network error", Toast.LENGTH_SHORT).show();
}
});
// Creating RequestQueue
CustomVolleyRequestQueue.getInstance(getApplicationContext()).addToRequestQueue(jsonArrayRequest);
}
private void parseData(JSONArray response) {
urlResponse = new ArrayList<>();
for (int i = 0; i < response.length(); i++) {
JSONObject jsonObject;
try {
jsonObject = response.getJSONObject(i);
String Images = jsonObject.getString("Image");
urlResponse.add(Images);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
private class ImageAdapter extends BaseAdapter {
/**
* The context.
*/
private Activity context;
ArrayList<String> urlImages;
/**
* Instantiates a new image adapter.
*
* @param localContext the local context
*/
public ImageAdapter(Activity localContext, ArrayList<String> urlImages) {
context = localContext;
images = getAllShownImagesPath(context);
this.urlImages = urlImages;
}
public int getCount() {
return urlImages.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView,
ViewGroup parent) {
ImageView picturesView;
if (convertView == null) {
picturesView = new ImageView(context);
picturesView.setScaleType(ImageView.ScaleType.FIT_CENTER);
picturesView
.setLayoutParams(new GridView.LayoutParams(270, 270));
} else {
picturesView = (ImageView) convertView;
}
try {
Glide.with(context).load(urlImages.get(position))
.placeholder(R.mipmap.ic_launcher_round).centerCrop()
.into(picturesView);
} catch (Exception e) {
e.printStackTrace();
}
return picturesView;
}
解析数据后添加此行:
gallery.setAdapter(new ImageAdapter(this, urlResponse));
像那样:
private void parseData(JSONArray response) {
urlResponse = new ArrayList<>();
for (int i = 0; i < response.length(); i++) {
JSONObject jsonObject;
try {
jsonObject = response.getJSONObject(i);
String Images = jsonObject.getString("Image");
urlResponse.add(Images);
} catch (JSONException e) {
e.printStackTrace();
}
}
gallery.setAdapter(new ImageAdapter(this, urlResponse));
}
您应该像在 ArrayList 中一样在 ImageAdapter 中创建方法(add、addAll 等),并在 ImageAdapter 中的 ArrayList 发生更改后调用 notifyDataSetChanged。
public void add(String text) {
urlImages.add(text);
notifyDataSetChanged();
}
public void addAll(List<String> text) {
urlImages.addAll(text);
notifyDataSetChanged();
}
此外,您将 null 对象作为 urlImages 传递给 ItemAdapter,您应该考虑创建构造函数,它将使用新的空列表初始化 urlImages,或者传递一个非 null 对象。