Android: OnItemCLickListener not working in listview
I'm relatively new to Android development, but my project went well enough until I ran into this issue. I researched this question, but none of the solutions to the other questions fixed my problem.
I have SportsAvtivity
one that implements AdapterView
OnItemClickListener
, but nothing happens when I click on a list item.
Any help would be greatly appreciated.
SportsActivity.java:
public class SportsActivity extends Activity implements AdapterView.OnItemClickListener {
ListView mainListView;
JSONAdapter mJSONAdapter;
private static final String QUERY_URL = "http://myurl.myurl/jsonOutput.php";
ProgressDialog mDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sports);
// Access the ListView
mainListView = (ListView) findViewById(R.id.list);
// Set this activity to react to list items being pressed
mainListView.setOnItemClickListener(this);
// Create a JSONAdapter for the ListView
mJSONAdapter = new JSONAdapter(this, getLayoutInflater());
// Set the ListView to use the ArrayAdapter
mainListView.setAdapter(mJSONAdapter);
mDialog = new ProgressDialog(this);
mDialog.setMessage("Searching for Clubs");
mDialog.setCancelable(false);
// Create a client to perform networking
AsyncHttpClient client = new AsyncHttpClient();
// Show ProgressDialog to inform user that a task in the background is occurring
mDialog.show();
// Have the client get a JSONArray of data
// and define how to respond
client.get(QUERY_URL, new JsonHttpResponseHandler() {
@Override
public void onSuccess(JSONObject jsonObject) {
// Dismiss the ProgressDialog
mDialog.dismiss();
// update the data in your custom method.
mJSONAdapter.updateData(jsonObject.optJSONArray("vfss"));
}
@Override
public void onFailure(int statusCode, Throwable throwable, JSONObject error) {
// Dismiss the ProgressDialog
mDialog.dismiss();
// Display a "Toast" message
// to announce the failure
Toast.makeText(getApplicationContext(), "Network error, please close app and try again", Toast.LENGTH_LONG).show();
// Log error message
// to help solve any problems
Log.e("omg android", statusCode + " " + throwable.getMessage());
}
}
);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Now that the user chosen an item, grab the cover data
//JSONObject jsonObject = (JSONObject) mJSONAdapter.getItem(position);
//String clubImage = jsonObject.optString("Image_Path","");
Toast.makeText(SportsActivity.this,"Clicked",Toast.LENGTH_SHORT).show();
// create an Intent to take you over to a new DetailActivity
Intent clubIntent = new Intent(this, ClubActivity.class);
// pack away the data about the cover
// into your Intent before you head out
//clubIntent.putExtra("clubImage", clubImage);
// start the next Activity using your prepared Intent
startActivity(clubIntent);
}
}
activity_sports.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#F1F1F1"
tools:context=".MainActivity" >
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/row">
</ListView>
</LinearLayout>
row.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="4dp"
android:orientation="vertical"
android:background="#ffffffff"
android:descendantFocusability="blocksDescendants">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="80dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal"
android:showDividers="none"
android:focusable="false"
android:clickable="false">
<ImageView
android:id="@+id/ivImage"
android:layout_width="70dp"
android:layout_height="70dp"
android:src="@mipmap/sports256"
android:layout_gravity="center_vertical"
android:layout_marginLeft="2dp"
android:focusable="false"
android:clickable="false"/>
<TextView
android:id="@+id/tvName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/clubName"
android:layout_weight="0.7"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp"
android:textColor="#ff000000"
android:textSize="25sp"
android:maxWidth="80dp"
android:minWidth="80dp"
android:focusable="false"
android:clickable="false"/>
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@mipmap/point"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp"
android:layout_weight="0.1"
android:focusable="false"
android:clickable="false"/>
</LinearLayout>
</LinearLayout>
logcat when I click on the item:
05-22 22:40:20.851 6628-6628/dmca.vfss I/libpersona﹕ KNOX_SDCARD checking this for 10340
05-22 22:40:20.851 6628-6628/dmca.vfss I/libpersona﹕ KNOX_SDCARD not a persona
05-22 22:40:37.531 6628-6628/dmca.vfss V/ActivityThread﹕ updateVisibility : ActivityRecord{22ae818d token=android.os.BinderProxy@28038da6 {dmca.vfss/dmca.vfss.MainActivity}} show : false
05-22 22:40:20.851 6628-6628/dmca.vfss E/Zygote﹕ MountEmulatedStorage()
05-22 22:40:20.851 6628-6628/dmca.vfss E/Zygote﹕ v2
05-22 22:40:20.931 6628-6628/dmca.vfss I/SELinux﹕ Function: selinux_compare_spd_ram, SPD-policy is existed. and_ver=SEPF_SM-N9005_4.4.2 ver=40
05-22 22:40:20.931 6628-6628/dmca.vfss I/SELinux﹕ Function: selinux_compare_spd_ram , priority [2] , priority version is VE=SEPF_SM-N9005_5.0_0002
05-22 22:40:20.931 6628-6628/dmca.vfss E/SELinux﹕ [DEBUG] get_category: variable seinfo: default sensitivity: NULL, cateogry: NULL
05-22 22:40:20.931 6628-6628/dmca.vfss I/art﹕ Late-enabling -Xcheck:jni
05-22 22:40:20.971 6628-6628/dmca.vfss D/TimaKeyStoreProvider﹕ TimaSignature is unavailable
05-22 22:40:20.971 6628-6628/dmca.vfss D/ActivityThread﹕ Added TimaKeyStore provider
05-22 22:40:21.021 6628-6628/dmca.vfss D/ResourcesManager﹕ creating new AssetManager and set to /data/app/dmca.vfss-1/base.apk
05-22 22:40:21.161 6628-6628/dmca.vfss D/Activity﹕ performCreate Call secproduct feature valuefalse
05-22 22:40:21.161 6628-6628/dmca.vfss D/Activity﹕ performCreate Call debug elastic valuetrue
05-22 22:40:21.181 6628-6653/dmca.vfss D/OpenGLRenderer﹕ Render dirty regions requested: true
05-22 22:40:21.191 6628-6628/dmca.vfss D/Atlas﹕ Validating map...
05-22 22:40:21.211 6628-6653/dmca.vfss I/Adreno-EGL﹕ <qeglDrvAPI_eglInitialize:410>: EGL 1.4 QUALCOMM build: AU_LINUX_ANDROID_LA.BF.1.1_RB1.05.00.00.002.025_msm8974_LA.BF.1.1_RB1__release_AU ()
OpenGL ES Shader Compiler Version: E031.25.01.03
Build Date: 11/19/14 Wed
Local Branch: mybranch5813579
Remote Branch: quic/LA.BF.1.1_rb1.11
Local Patches: NONE
Reconstruct Branch: AU_LINUX_ANDROID_LA.BF.1.1_RB1.05.00.00.002.025 + 30e7589 + NOTHING
05-22 22:40:21.211 6628-6653/dmca.vfss I/OpenGLRenderer﹕ Initialized EGL, version 1.4
05-22 22:40:21.241 6628-6653/dmca.vfss I/OpenGLRenderer﹕ HWUI protection enabled for context , &this =0xaef22088 ,&mEglDisplay = 1 , &mEglConfig = 8
05-22 22:40:21.251 6628-6653/dmca.vfss D/OpenGLRenderer﹕ Enabling debug mode 0
05-22 22:40:21.331 6628-6628/dmca.vfss I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@28038da6 time:398511238
05-22 22:40:36.701 6628-6628/dmca.vfss D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
05-22 22:40:36.851 6628-6628/dmca.vfss I/Timeline﹕ Timeline: Activity_launch_request id:dmca.vfss time:398526750
05-22 22:40:36.911 6628-6628/dmca.vfss D/AbsListView﹕ Get MotionRecognitionManager
05-22 22:40:36.971 6628-6628/dmca.vfss D/Activity﹕ performCreate Call secproduct feature valuefalse
05-22 22:40:36.971 6628-6628/dmca.vfss D/Activity﹕ performCreate Call debug elastic valuetrue
05-22 22:40:36.971 6628-7916/dmca.vfss I/System.out﹕ Thread-187779(ApacheHTTPLog):Reading from variable values from setDefaultValuesToVariables
05-22 22:40:36.981 6628-7916/dmca.vfss I/System.out﹕ Thread-187779(ApacheHTTPLog):isShipBuild true
05-22 22:40:36.981 6628-7916/dmca.vfss I/System.out﹕ Thread-187779(ApacheHTTPLog):SmartBonding Enabling is true, SHIP_BUILD is true, log to file is false, DBG is false
05-22 22:40:37.181 6628-6628/dmca.vfss I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@108d0db6 time:398527086
05-22 22:40:43.041 6628-7916/dmca.vfss I/System.out﹕ pool-1-thread-1 calls detatch()
05-22 22:40:43.081 6628-6628/dmca.vfss W/Settings﹕ Setting airplane_mode_on has moved from android.provider.Settings.System to android.provider.Settings.Global, returning read-only value.
05-22 22:40:43.111 6628-8487/dmca.vfss I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
05-22 22:40:43.111 6628-8485/dmca.vfss I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
05-22 22:40:43.111 6628-8485/dmca.vfss I/System.out﹕ (HTTPLog)-Static: isShipBuild true
05-22 22:40:43.111 6628-8487/dmca.vfss I/System.out﹕ (HTTPLog)-Static: isShipBuild true
05-22 22:40:43.111 6628-8487/dmca.vfss I/System.out﹕ (HTTPLog)-Thread-187787-964167417: SmartBonding Enabling is false, SHIP_BUILD is true, log to file is false, DBG is false
05-22 22:40:43.111 6628-8487/dmca.vfss I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
05-22 22:40:43.111 6628-8485/dmca.vfss I/System.out﹕ (HTTPLog)-Thread-187785-202010435: SmartBonding Enabling is false, SHIP_BUILD is true, log to file is false, DBG is false
05-22 22:40:43.111 6628-8485/dmca.vfss I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
05-22 22:40:43.121 6628-8486/dmca.vfss I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
05-22 22:40:43.121 6628-8486/dmca.vfss I/System.out﹕ (HTTPLog)-Static: isShipBuild true
05-22 22:40:43.121 6628-8486/dmca.vfss I/System.out﹕ (HTTPLog)-Thread-187786-522844608: SmartBonding Enabling is false, SHIP_BUILD is true, log to file is false, DBG is false
05-22 22:40:43.121 6628-8486/dmca.vfss I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
05-22 22:40:43.131 6628-6628/dmca.vfss E/ViewRootImpl﹕ sendUserActionEvent() mView == null
05-22 22:40:43.151 6628-8487/dmca.vfss I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
05-22 22:40:43.151 6628-8485/dmca.vfss I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
05-22 22:40:43.151 6628-8486/dmca.vfss I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
05-22 22:40:43.161 6628-8487/dmca.vfss I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
05-22 22:40:44.231 6628-6628/dmca.vfss D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
05-22 22:40:44.911 6628-6628/dmca.vfss D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
05-22 22:40:45.451 6628-6628/dmca.vfss D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
05-22 22:40:45.681 6628-6628/dmca.vfss D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
05-22 22:40:45.971 6628-6628/dmca.vfss D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
05-22 22:40:46.291 6628-8485/dmca.vfss I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
05-22 22:40:46.521 6628-6628/dmca.vfss D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
05-22 22:40:46.751 6628-6628/dmca.vfss D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
05-22 22:40:46.961 6628-6628/dmca.vfss D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
05-22 22:40:47.141 6628-6628/dmca.vfss D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
05-22 22:41:47.261 6628-6628/dmca.vfss V/ActivityThread﹕ updateVisibility : ActivityRecord{1f9e9c31 token=android.os.BinderProxy@108d0db6 {dmca.vfss/dmca.vfss.SportsActivity}} show : true
05-22 22:42:46.921 6628-6635/dmca.vfss W/art﹕ Suspending all threads took: 6.217ms
05-22 22:48:56.991 6628-6635/dmca.vfss W/art﹕ Suspending all threads took: 8.950ms
JSONAdapter.java:
package dmca.vfss;
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;
import com.squareup.picasso.Picasso;
import org.json.JSONArray;
import org.json.JSONObject;
public class JSONAdapter extends BaseAdapter {
Context mContext;
LayoutInflater mInflater;
JSONArray mJsonArray;
public JSONAdapter(Context context, LayoutInflater inflater) {
mContext = context;
mInflater = inflater;
mJsonArray = new JSONArray();
}
@Override
public boolean isEnabled (int position) {
return false;
}
@Override
public int getCount() {
return mJsonArray.length();
}
@Override
public Object getItem(int position) {
return mJsonArray.optJSONObject(position);
}
@Override
public long getItemId(int position) {
// unused
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
// check if the view already exists
// if so, no need to inflate and findViewById again!
if (convertView == null) {
// Inflate the custom row layout from your XML.
convertView = mInflater.inflate(R.layout.row, null);
// create a new "Holder" with subviews
holder = new ViewHolder();
holder.thumbnailImageView = (ImageView) convertView.findViewById(R.id.ivImage);
holder.titleTextView = (TextView) convertView.findViewById(R.id.tvName);
// hang onto this holder for future recycling
convertView.setTag(holder);
} else {
// just get the holder you already made
holder = (ViewHolder) convertView.getTag();
}
// Get the current data in JSON form
JSONObject jsonObject = (JSONObject) getItem(position);
// See if there is an image path in the Object
if (jsonObject.has("Image_Path")) {
// Construct the image URL (specific to API)
String imageURL = jsonObject.optString("Image_Path");
// Use Picasso to load the image
// Temporarily have a placeholder in case it slow to load
Picasso.with(mContext).load(imageURL).into(holder.thumbnailImageView);
} else {
// If there is no cover ID in the object, use a placeholder
holder.thumbnailImageView.setImageResource(R.mipmap.sports256);
}
// Grab the club name from the JSON
String clubName = "";
if (jsonObject.has("Club_Name")) {
clubName = jsonObject.optString("Club_Name");
}
// Send the String to the TextView for display
holder.titleTextView.setText(clubName);
return convertView;
}
// this is used so you only ever have to do
// inflation and finding by ID once ever per View
private static class ViewHolder {
public ImageView thumbnailImageView;
public TextView titleTextView;
}
public void updateData(JSONArray jsonArray) {
// update the adapter dataset
mJsonArray = jsonArray;
notifyDataSetChanged();
}
}
source to share
Although a very old question, but I am posting an answer to it anyway so that it helps someone. Like using a layout inside a list, use ..
android:descendantFocusability="blocksDescendants"
.. on the first parent layout inside the list. This works like magic, the click will not be consumed by any item inside the list, but will go directly to the list item.
source to share
Try this and let me know if it works. Delete
implements AdapterView.OnItemClickListener
And add:
mainListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(SportsActivity.this,"Clicked",Toast.LENGTH_SHORT).show();
}
});
source to share