纵向和横向模式中的交错网格视图

时间:2015-04-11 11:34:14

标签: android staggered-gridview

我使用交错的网格视图来显示我通过网络服务获得的信息。当我以格式肖像显示它没有问题。(我有2个网格)。在横向模式下,我有3个网格。问题出在这里,textview改变了大小并变得更大,当我滚动到最后,我将有2或1个网格(而不是3),有时没有网格。

这是适配器代码:

 public class StaggeredAdapterVraiCategorie extends ArrayAdapter<VraiCategorie> {
ArrayList<VraiCategorie> categorieList;
LayoutInflater vi;
int Resource;
private ImageLoader mLoader;

Context context;
public StaggeredAdapterVraiCategorie(Context context, int resource,ArrayList<VraiCategorie> objects) {
    super(context, resource, objects);
    categorieList = objects;
    Resource = resource;
    this.context=context;
    vi = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);



    mLoader = new ImageLoader(context);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder holder;
    if (convertView == null) {

        LayoutInflater layoutInflator = LayoutInflater.from(getContext());
        convertView = layoutInflator.inflate(R.layout.vrai_list_item_sample,null);
        holder = new ViewHolder();
        holder.imageView = (DynamicHeightImageView)convertView.findViewById(R.id.image);
        holder.namecateg = (TextView)convertView.findViewById(R.id.namecateg);

        holder.reftype = (TextView)convertView.findViewById(R.id.reftype);
        holder.myid = (TextView)convertView.findViewById(R.id.myid);


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

    holder.namecateg.setText(categorieList.get(position).getNamecateg());
    holder.reftype.setText(categorieList.get(position).getReftype());
    holder.myid.setText(categorieList.get(position).getMyid());

    String imgget=categorieList.get(position).getImagecateg();
    if(!imgget.equals("null")){
        String mylink="http://myserver/images/";
        String imgexe=mylink+imgget;
        new DownloadImageTask(holder.imageView).execute(imgexe);
    }
    else if (imgget.equals("null")){
        holder.imageView.setHeightRatio(1.0); //ta3mel prob fel staggered
        holder.imageView.setImageResource(R.drawable.nophoto);
    }


    if(!categorieList.get(position).getImagecateg().equals("null")) {

        String mylink = "http://myserver/images/";
       // holder = (ViewHolder) convertView.getTag();

        mLoader.DisplayImage(mylink + categorieList.get(position).getImagecateg(), holder.imageView);
    }
    return convertView;
}

static class ViewHolder {
    public  DynamicHeightImageView imageView;
    public  TextView namecateg;
    public  TextView reftype;
    public  TextView myid;


}
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {

        bmImage.setImageBitmap(result);
    }
  }
}

这是主要课程:

public class VraiCateg extends BaseFragment implements StaggeredGridView.OnItemClickListener {
ArrayList<VraiCategorie> categorieList;
StaggeredAdapterVraiCategorie adapter;
StaggeredGridView staggeredGridView;
String passtitle="";
SharedPreferences sharedpreferences;
public static final String MyPREFERENCES="My profile info";
public static final String keyidhotel="idH";

private String myidhotel="";

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.vrai_main, container, false);

       Main activity = (Main) getActivity();
       String myDataFromActivity = activity.getData();
       myidhotel = myDataFromActivity;
    final String url =  "http://myserver/api/type_etablissement/categories/id/"+myidhotel;
    //url = url + myidhotel;


    Toast.makeText(getActivity().getApplicationContext(), "Adresse categ URL "+url, Toast.LENGTH_LONG).show();


    staggeredGridView = (StaggeredGridView) view.findViewById(R.id.grid_view);
   // myidhotel = getArguments().getString("idH");


    int margin = getResources().getDimensionPixelSize(R.dimen.margin);
    staggeredGridView.setPadding(margin, 0, margin, 0);
    if(!(MySuperScaler.scaled))
        MySuperScaler.scaleViewAndChildren(view, MySuperScaler.scale);
    categorieList = new ArrayList<VraiCategorie>();
    new CategorieAsyncTask().execute(url);
    staggeredGridView.setOnItemClickListener(this);
    return view;
}


class CategorieAsyncTask extends AsyncTask<String, Void, Boolean> {

    ProgressDialog dialog;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        dialog = new ProgressDialog(getActivity());
        dialog.setMessage("Loading, please wait");
        dialog.setTitle("Connecting server");
        dialog.show();
        dialog.setCancelable(false);
    }

    @Override
    protected void onPostExecute(Boolean result) {
        super.onPostExecute(result);
        dialog.cancel();
       if (result == false){
            //show a msg to user that data not parsed
            Toast.makeText(getActivity().getApplicationContext(), "Unable to fetch data from server", Toast.LENGTH_LONG).show();

        }
        else {
            //call etab adapter and create now adapter
            StaggeredAdapterVraiCategorie adapter = new StaggeredAdapterVraiCategorie(getActivity().getApplicationContext(),R.layout.vrai_list_item_sample,categorieList);
            staggeredGridView.setAdapter(adapter);
            adapter.notifyDataSetChanged();


        }
    }

    @Override
    protected Boolean doInBackground(String... params) {

        try {
            HttpClient client = new DefaultHttpClient();
            //HttpPost post = new HttpPost(uri); //uri in oncreate method
            HttpGet get = new HttpGet(params[0]);
            HttpResponse response = client.execute(get);

            int status = response.getStatusLine().getStatusCode();
            if(status ==200){
                //get the response and pars it
                HttpEntity entity = response.getEntity();
                String data = EntityUtils.toString(entity);
                JSONObject jObj = new JSONObject(data);
                JSONArray jArray = jObj.getJSONArray("categories");
                for(int i=0;i<jArray.length();i++ ){
                    VraiCategorie categ = new VraiCategorie();
                    JSONObject jRealObject = jArray.getJSONObject(i);

                    categ.setImagecateg(jRealObject.getString("image_categorie"));

                   categ.setNamecateg(jRealObject.getString("description_type"));
                    //ref_type=jRealObject.getString("ref_type");
                    categ.setReftype(jRealObject.getString("ref_type"));
                    categ.setMyid(jRealObject.getString("my_id"));

                    categorieList.add(categ);
                }

                return true; //verifie the parse
            }

        }catch (ClientProtocolException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        catch (JSONException e) {
            e.printStackTrace();
        }
        //http call
        return false;
    }
}

@Override
public void onItemClick(StaggeredGridView parent, View view, int position, long id) {

   final String ref_type= categorieList.get(position).getReftype();
    Fragment newFragment = new VraiRela();
    FragmentTransaction transaction = getFragmentManager().beginTransaction();
   Bundle args=new Bundle();
    args.putString("ref_type",ref_type);
    args.putString("idH",myidhotel);
   // Toast.makeText(getActivity().getApplicationContext(), "ref_type"+ref_type+"idH"+myidhotel, Toast.LENGTH_LONG).show();
    newFragment.setArguments(args);
    transaction.replace(R.id.frame_container, newFragment);
    transaction.addToBackStack(null);
    transaction.commit();
  /*  myidhotel="";
    sharedpreferences =  getActivity().getApplicationContext().getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedpreferences.edit();
    myidhotel="";
    editor.putString(keyidhotel, myidhotel);
    editor.commit();*/
  }

}

0 个答案:

没有答案