我的活动:
package com.app.redbuslayout;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewGroup.LayoutParams;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.RelativeLayout;
import android.widget.Toast;
public class MainActivity extends Activity {
GridView grid;
RelativeLayout r1;
String maxrows;
int maxcol;
int[] imageId = {
R.drawable.seat,
R.drawable.seat,
R.drawable.seat,
R.drawable.seat,
R.drawable.seat,
R.drawable.seat,
R.drawable.seat,
R.drawable.seat ,R.drawable.seat,
R.drawable.seat,
R.drawable.seat,
R.drawable.seat,
R.drawable.seat,
R.drawable.seat,
R.drawable.seat,
R.drawable.seat,
R.drawable.seat,
R.drawable.seat,
R.drawable.seat,
R.drawable.seat,
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CustomGrid adapter = new CustomGrid(MainActivity.this, imageId);
RelativeLayout relativeLayout = new RelativeLayout(this);
// define the RelativeLayout layout parameters.
RelativeLayout.LayoutParams relativeLayoutParams = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.FILL_PARENT,
RelativeLayout.LayoutParams.FILL_PARENT);
grid =new GridView(MainActivity.this);
grid.setLayoutParams(new GridView.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
grid.setNumColumns(maxcol);
grid.setAdapter(adapter);
relativeLayout.addView(grid);
// set the RelativeLayout as our content view
setContentView(relativeLayout, relativeLayoutParams);
new GetRoute().execute("http://sb2.reloadit.in/TravelServices.asmx/Getlayout");
}
private class GetRoute extends AsyncTask<String, Void, JSONObject> {
/*String mJourneyDate;
public GetData(String pJourneyDate) {
this.mJourneyDate = pJourneyDate;
}*/ProgressDialog pd = null;
@Override
protected void onPreExecute() {
super.onPreExecute();
pd = ProgressDialog.show(MainActivity.this, "", "Loading...", true);
}
@Override
protected JSONObject doInBackground(String... params) {
String response;
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(params[0]);
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
nameValuePair.add(new BasicNameValuePair("RouteScheduleID","428205707"));
nameValuePair.add(new BasicNameValuePair("JourneyDate","2014-12-16"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePair));
HttpResponse responce = httpclient.execute(httppost);
HttpEntity httpEntity = responce.getEntity();
response = EntityUtils.toString(httpEntity);
Log.d("response is", response);
return new JSONObject(response);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(JSONObject result)
{
super.onPostExecute(result);
//Log.v("TAG_RESULTadapter",""+result);
pd.dismiss();
if(result != null)
{
try
{
JSONObject jobj = result.getJSONObject("Response");
String message = jobj.getString("Message");
String issuceess = jobj.getString("IsSuccess");
if(issuceess.equals("true"))
{
JSONObject layout = result.getJSONObject("Layout");
// Log.v("TAG_routearray",""+layoutarray);
maxrows=layout.getString("MaxRows");
maxcol=layout.getInt("MaxColumns");
/* Log.v("TAG_maxrows",""+maxrows);
Log.v("TAG_Maxcol",""+maxcol);*/
JSONArray routearray = layout.getJSONArray("SeatDetails");
for (int i = 0; i < routearray.length(); i++) {
String Row = routearray.getJSONObject(i).getString("Row");
// Log.v("TAG_routearray",""+Row);
String Col = routearray.getJSONObject(i).getString("Col");
String Height = routearray.getJSONObject(i).getString("Height");
String Width = routearray.getJSONObject(i).getString("Width");
String SeatNo = routearray.getJSONObject(i).getString("SeatNo");
String Gender = routearray.getJSONObject(i).getString("Gender");
String Deck = routearray.getJSONObject(i).getString("Deck");
String IsAvailable = routearray.getJSONObject(i).getString("IsAvailable");
String Fare = routearray.getJSONObject(i).getString("Fare");
Log.v("TAG_Maxfare",""+Fare);
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
else
{
Toast.makeText(MainActivity.this, "Network Problem", Toast.LENGTH_LONG).show();
}
}
}
}
适配器类:
package com.app.redbuslayout;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class CustomGrid extends BaseAdapter{
private Context mContext;
private final int[] Imageid;
public CustomGrid(Context c,int[] Imageid ) {
mContext = c;
this.Imageid = Imageid;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return Imageid.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View grid;
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
grid = new View(mContext);
grid = inflater.inflate(R.layout.row_grid, null);
ImageView imageView = (ImageView)grid.findViewById(R.id.grid_image);
imageView.setImageResource(Imageid[position]);
} else {
grid = (View) convertView;
}
return grid;
}
}
在我从json的应用程序中,我得到了maxrows和maxcolumns。基于maxrow和maxcolumn,我想创建具有相同列数和行数的网格视图。每个网格包含相同的图像。
那我该如何动态创建这个gridview呢?
答案 0 :(得分:1)
LazyAdapter adapter;
adapter = new LazyAdapter(this, Col , Height , Width, SeatNo );
grid.setAdapter((ListAdapter) adapter);
并在LazyAdapter中使用BaseAdapter类扩展
public LazyAdapter(Activity a, String[] d, String[] textname,
String catID, String subCatIDD) {
activity = a;
data = d;
textdataamag = textname;
this.catID = catID;
this.subCatIDD = subCatIDD;
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
它是构造函数,用于保存从gridview类发送的视图。
public View getView(int position, View convertView, ViewGroup parent) {
//here you get handle your view
离。
View vi = convertView;
if (convertView == null)
vi = inflater.inflate(R.layout.masterindex, null);
TextView text = (TextView) vi.findViewById(R.id.channelTXT);
ImageView image = (ImageView) vi.findViewById(R.id.channelIMG);
}
return view
处理LazyAdapter类,您可以完全参考 http://www.javacodegeeks.com/2013/08/android-custom-grid-view-example-with-image-and-text.html CustomGridViewAdapter.java类