android une Gridview ne fonctionne pas dans la liste personnalisée




projet android pdf (4)

Vous avez peut-être résolu le problème, mais j'ai une autre solution qui pourrait aider quelqu'un.

Utilisez android:descendantFocusability="beforeDescendants" dans la structure racine de votre XML list_cell.

J'utilise gridview dans une Listview, mais j'ai un problème focalisable.

J'ai défini la largeur du gridview, mais je remplis certains éléments de gridview, sur l'espace gauche de gridview (qui est vide) signifie des éléments non remplis de gridview dans listview. Si je clique dessus, il n'effectue pas de clic de liste

Comme indiqué dans l'image, je souhaite effectuer un clic sur un élément de la liste de sélection s'il est cliqué n'importe où dans l'élément de la liste. Je veux obtenir un clic de listage .

Mais quand je clique sur l'élément ListView , c'est-à-dire, GridView alors le clic ListItem ne fonctionne pas ...

public class History extends Activity {

    String name, id, description, count, total;

    ArrayList<String> TAG_ID = new ArrayList<String>();
    ArrayList<String> TAG_COFFEESHOP_NAME = new ArrayList<String>();
    ArrayList<String> TAG_COUNT = new ArrayList<String>();
    ArrayList<String> TAG_TOTAL = new ArrayList<String>();

    Context context;
    JSONArray CoffeeUser = null;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listlayout);
        ListView listView = (ListView) findViewById(R.id.listnew);
        listView.setAdapter(new MyCustomAdapter());
        listView.setTextFilterEnabled(true);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
        {
            public void onItemClick(AdapterView<?> paramAnonymousAdapterView, View paramAnonymousView, int paramAnonymousInt, long paramAnonymousLong)
            {
                Intent intent = new Intent();
                intent.putExtra("coffeeshopid", ((TextView)paramAnonymousView.findViewById(R.id.hlcoffeeshopid)).getText() );
                intent.setClass(getParent(), Stamps.class);
                HistoryStack hisStack = (HistoryStack) getParent();
                hisStack.push("Stamps", intent);
            }
        });
    }

    class MyCustomAdapter extends BaseAdapter {
        Context ctx;

        public MyCustomAdapter() {
            // Creating JSON Parser instance
            JSONParser jParser = new JSONParser();
            SharedPreferences prfs = getSharedPreferences("GUID_FILE_NAME", Context.MODE_PRIVATE);
                JSONObject json = jParser.methodhistory("http://api.com");
            try {
                // Getting Array of Employee
                CoffeeUser = json.getJSONArray("CoffeeUser");

                // Looping of List
                for (int i = 0; i < CoffeeUser.length(); i++) {
                    JSONObject c = CoffeeUser.getJSONObject(i);

                    // Storing each json item in variable
                    id = c.getString("CS_Id");
                    name = c.getString("ShopName");
                    count = c.getString("totalstamps");
                    total = c.getString("threshholdcount");

                    // Adding all get values into array
                    if (name != "null") {
                        TAG_COFFEESHOP_NAME.add(name);
                        TAG_ID.add(id);
                        TAG_TOTAL.add(total);
                        TAG_COUNT.add(count);
                    }
                }
            }
            catch (JSONException e) {
                e.printStackTrace();
            }
        }

        @Override
        public int getCount() {
            return TAG_COFFEESHOP_NAME.size();
        }

        @Override
        public Object getItem(int paramInt) {
            return TAG_COFFEESHOP_NAME.get(paramInt);
        }

        @Override
        public long getItemId(int paramInt) {
            return paramInt;
        }

        public class MyCustomHolder {
            public GridView localGrid;
            public TextView CoffeeShopName,coffeeshopsdescription,coffeeshopid;
        }

        @Override
        public View getView(int paramInt, View paramView,ViewGroup paramViewGroup) {
            View localView = paramView;
            MyCustomHolder holder = null;
            if (localView == null) {
                LayoutInflater inflater = (LayoutInflater) History.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                localView = inflater.inflate(R.layout.historylist, null);
                holder = new MyCustomHolder();
                holder.CoffeeShopName = (TextView) localView.findViewById(R.id.hlcoffeeshopname);
                holder.coffeeshopid = (TextView) localView.findViewById(R.id.hlcoffeeshopid);
                holder.localGrid = (GridView) localView.findViewById(R.id.gridViewdistorylist);
                localView.setTag(holder);
            }
            else {
                holder = (MyCustomHolder) localView.getTag();
            }
            holder.CoffeeShopName.setText(TAG_COFFEESHOP_NAME.get(paramInt));
            holder.coffeeshopid.setText(TAG_ID.get(paramInt));
            holder.localGrid.setAdapter(new GridAdapterA(History.this, TAG_TOTAL.get(paramInt), TAG_COUNT.get(paramInt)));
            holder.localGrid.setFocusable(false);
            holder.localGrid.setFocusableInTouchMode(false);
            holder.CoffeeShopName.setFocusable(false);
            holder.CoffeeShopName.setFocusableInTouchMode(false);
            localView.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                     Intent intent = new Intent();
                        intent.putExtra("coffeeshopid", ((TextView)v.findViewById(R.id.hlcoffeeshopid)).getText() );
                          intent.setClass(getParent(), Stamps.class);
                          HistoryStack hisStack = (HistoryStack) getParent();
                          hisStack.push("Stamps", intent);
                }
            });

            return localView;
        }
    }

    public class GridAdapterA extends BaseAdapter {

        private Context context;
        String total,count;

        public GridAdapterA(Context context) {
            this.context = context;
        }

        public GridAdapterA(Context context, String total, String count) {
            // TODO Auto-generated constructor stub
            this.context = context;
            this.total = total;
            this.count = count;
        }

        public boolean areAllItemsEnabled()
        {
            return false;
        }

        public boolean isEnabled(int position)
        {
            return false;
        }

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

            LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            View gridView;

            if (convertView == null) {
                gridView = new View(context);
                gridView = inflater.inflate(R.layout.customgrid_row, null);
                gridView.setFocusable(false);
                ImageView imageView = (ImageView) gridView.findViewById(R.id.grid_item_image);
                imageView.setFocusable(false);
                int i = 0;
                if(count!="null")
                i = Integer.parseInt(count);

                if (position<i ) {
                    //imageView.setImageResource(R.drawable.ii);
                    //    textView.setText(gridlist[position]);
                }
                else {
                    imageView.setImageResource(R.drawable.changedcup);
                    // textView.setText("");
                }
            }
            else {
                gridView = (View) convertView;
            }
            /*gridView.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent();
                intent.putExtra("coffeeshopid", ((TextView)v.findViewById(R.id.hlcoffeeshopid)).getText() );
                intent.setClass(getParent(), Stamps.class);
                HistoryStack hisStack = (HistoryStack) getParent();
                hisStack.push("Stamps", intent);    }
            });*/

            return gridView;
        }

        @Override
        public int getCount() {
            int j=0;
            if(total!="null"){
            j = Integer.parseInt(total);
            }
            return j;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }
    }
}

liste d'historique

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/list_selector"
    android:orientation="horizontal"
    android:padding="5dip" >

    <LinearLayout
        android:id="@+id/thumbnail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginRight="5dip"
        android:background="@drawable/image_bg"
        android:padding="3dip" >

        <ImageView
            android:id="@+id/list_image"
            android:layout_width="50dip"
            android:layout_height="50dip"
            android:src="@drawable/rcup" />
    </LinearLayout>

    <!-- hlcoffeeshopname Of Song -->

    <TextView
        android:id="@+id/hlcoffeeshopname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/thumbnail"
        android:layout_toRightOf="@+id/thumbnail"
        android:text="Rihanna Love the way lie"
        android:textColor="#040404"
        android:textSize="20dip"
        android:textStyle="bold"
        android:typeface="sans" />

    <TextView
       android:id="@+id/hlcoffeeshopid"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:visibility="gone"
    />

    <GridView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/gridViewdistorylist"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:layout_below="@+id/hlcoffeeshopname"
        android:layout_toRightOf="@+id/thumbnail"
        android:columnWidth="20dp"
        android:background="@null"
        android:descendantFocusability="blocksDescendants"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:numColumns="10"
        android:stretchMode="none" >
    </GridView>
</RelativeLayout>

Nouveau GetView

@Override
    public View getView(int paramInt,
                        View paramView,
                        ViewGroup paramViewGroup) {
        View localView = paramView;
        MyCustomHolder holder = null;
        if (localView == null) {
            LayoutInflater inflater = (LayoutInflater) CopyOfHistory.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            localView = inflater.inflate(R.layout.copyhistorylist, null);
            holder = new MyCustomHolder();
            holder.coffeeShopName = (TextView) localView.findViewById(R.id.hlcoffeeshopname);
            holder.coffeeshopid = (TextView) localView.findViewById(R.id.hlcoffeeshopid);
            localView.setTag(holder);
        }
        else {
            holder = (MyCustomHolder) localView.getTag();
        }
        holder.coffeeShopName.setText(TAG_COFFEESHOP_NAME.get(paramInt));
        holder.coffeeshopid.setText(TAG_ID.get(paramInt));

        int looplimit = Integer.parseInt(TAG_TOTAL.get(paramInt));
        for (int i = 0; i < looplimit; i++) {
            Log.e("loop", String.valueOf(looplimit));
            ImageView imageView = new ImageView(CopyOfHistory.this);
            if (i < Integer.parseInt(TAG_COUNT.get(paramInt))) {
                imageView.setImageDrawable(getResources().getDrawable(R.drawable.ii));
            } else {
                imageView.setImageDrawable(getResources().getDrawable(R.drawable.iii));
            }
            RelativeLayout layout = (RelativeLayout) localView.findViewById(R.id.hlrlayout);
            RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(30,30);
            params.setMargins(i*40, 0, 0, 0);
            imageView.setLayoutParams(params);
            layout.addView(imageView);
            //holder.relativeLayout = new RelativeLayout();
        }

        holder.coffeeShopName.setFocusable(false);
        holder.coffeeShopName.setFocusableInTouchMode(false);
        localView.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent();
                intent.putExtra("coffeeshopid", ((TextView) v
                        .findViewById(R.id.hlcoffeeshopid)).getText());
                intent.setClass(getParent(), Stamps.class);
                HistoryStack hisStack = (HistoryStack) getParent();
                hisStack.push("Stamps", intent);
            }
        });

        return localView;
    }

Ordre d'avoir des listes dans d'autres listes. Vous devez générer une vue personnalisée. Si vous voulez un simple, composé d'une classe Java et d'un fichier XML, il vous suffit de l'instancier dans le code et de l'ajouter à une disposition linéaire.

Ici, je laisse un petit exemple.

XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical" >

    <TextView
        android:id="@+id/txtAltaPropinaTextoAyudaTipo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="5dp"
        android:gravity="center_vertical"
        android:text="-"
        android:textColor="#000000"
        android:textSize="18sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/txtListadoZonasNombreZona"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginRight="5dp"
        android:layout_marginTop="5dp"
        android:layout_toLeftOf="@+id/txtAltaPropinaTextoAyudaTipo"
        android:layout_toRightOf="@+id/txtAltaPropinaTextoAyudaTipo"
        android:singleLine="true"
        android:text="TextView"
        android:textColor="#000000" />
</RelativeLayout>

Code Java

public class CVTexto extends RelativeLayout {

    public TextView txtTexto;
    public int idCv;

    public CVTexto(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        IniciarCuadro();
    }

    public CVTexto(Context context, AttributeSet attrs) {

        super(context, attrs);
        IniciarCuadro();
    }

    public CVTexto(Context context, AttributeSet attrs, int defStyle) {

        super( context, attrs, defStyle );
        IniciarCuadro();
    }

    private void IniciarCuadro()
    {
        //Utilizamos el layout 'control_login' como interfaz del control
        String infService = Context.LAYOUT_INFLATER_SERVICE;
        LayoutInflater li =
            (LayoutInflater)getContext().getSystemService(infService);
        li.inflate(R.layout.ll_adapter_listado_zonas_asignadas_usuario, this, true);

        AsignarElemetos();
        //Obtenemoslas referencias a los distintos control

        //Asociamos los eventos necesarios
        // asignarEventos();
    }

    private void AsignarElemetos(){
        txtTexto = (TextView)findViewById(R.id.txtListadoZonasNombreZona);
    }
}

Ajouter à linearlayout:

cvTextp objCV = new  cvTexto(context);
LinearLayout.addView(objCv);

Et supprimer des vues:

LinearLayout.removeallViews;

J'ai fait des recherches dessus et je dois savoir que dans un widget scrollable qui utilise un adaptateur, vous ne devriez pas utiliser un autre widget qui est scrollable qui utilise également un adaptateur tel que gridview dans listview en raison de la complexité des événements tactiles.

Donc, je pense que vous devriez passer à une autre approche pour cela. Dans votre cas, vous pouvez ajouter une disposition linéaire et ajouter dynamiquement des images de coupes dans cette mise en page en définissant des paramètres. J'espère que cela vous a aidé.


J'ai obtenu cette réponse en changeant la disposition de grille à LinearLayout. J'ai ajouté des éléments de manière dynamique dans linearLayout, puis mon problème a été résolu.





gridview