Gridview click does not work inside user list

I use gridview inside Listview, but I have a focal problem.

I set the width of the gridview, but I'm filling in some gridview elements, in the left space of the gridview (which is empty) means that the elements do not fill the gridview in the listview. If I click on it, it won’t click the listitem

Enter image description here

As indicated in the image, I want to execute the list item by clicking if it is clicked anywhere on the list item. I want to get a click on the list .

But when I click on the ListView element, i.e. GridView , then clicking ListItem does not work ...

 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; } } } 

historylist

 <?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> 

New 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; } 
+7
android listview gridview
source share
5 answers

I got this answer by changing the grid layout to LinearLayout. I added elements dynamically in linearLayout, and then my problem was resolved.

+1
source share

You may have solved this, but I have another solution that might help someone.

Use android:descendantFocusability="beforeDescendants" in the root layout of your list_cell XML .

+2
source share

Order lists in other lists. You must create a custom view. If you want one simple one, consisting of a Java class and an XML file, then in the code you only need to create an instance and add it to the linear layout.

Here I leave a small example.

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> 

Java code

 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); } } 

Add to linearlayout:

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

And delete the views:

 LinearLayout.removeallViews; 
+1
source share

I did a research and I found out that inside a scrollable widget that uses an adapter, you should not use any scrollable widget that also uses an adapter, such as a gridview inside a listview, due to the complexity of touch events.

So, I think you should switch to a different approach. In your case, you can add a linear layout and can dynamically add cup images to this layout by setting parameters. Hope this helps you.

0
source share

I don't know how your code below works, but if I wanted to process each listener on every click, I would do something like below.

 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(); // Handle your each on-click of dynamic added view while they added in getview() method imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Do what is necessary } }); } 

I don't know how your code below works, but if I wanted to process each listener on every click, I would do something like below.

 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(); // Handle your each on-click of dynamic added view while they added in getview() method imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Do what is necessary } }); } 
0
source share

All Articles