Note that there are some explanatory texts on larger screens.

plurals
  1. POOnLongClickListener not firing for ListView
    text
    copied!<p>I used a Custom ListView and displayed some data using that ListView. When I click on the List View item, the onLongClickListener is not firing. I was not able to select any list item.</p> <p>View.xml :</p> <pre><code> &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" &gt; &lt;RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" &gt; &lt;TextView android:id="@+id/jokeTextView" android:text="This is a really long sample joke that should be ellipsisized in collapsed mode and show the complete text in the expanded mode." android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/dark" android:paddingTop="10dip" android:paddingBottom="10dip" android:paddingLeft="20dip" android:paddingRight="50dip" android:layout_alignParentRight="true" android:focusable="false" android:focusableInTouchMode="false" &gt; &lt;/TextView&gt; &lt;RadioGroup android:id="@+id/ratingRadioGroup" android:layout_width="50dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:orientation="vertical" android:layout_alignParentRight="true" &gt; &lt;RadioButton android:id="@+id/likeButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/like" android:button="@null" android:focusable="false" android:focusableInTouchMode="false" /&gt; &lt;RadioButton android:id="@+id/dislikeButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/dislike" android:button="@null" android:focusable="false" android:focusableInTouchMode="false" /&gt; &lt;/RadioGroup&gt; &lt;/RelativeLayout&gt; &lt;/RelativeLayout&gt; </code></pre> <p>Activity class :</p> <pre><code> package edu.calpoly.android.lab3; import java.util.ArrayList; import com.actionbarsherlock.app.SherlockActivity; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.view.ActionMode; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; import edu.calpoly.android.lab3.Joke; import edu.calpoly.android.lab3.R; import android.app.Activity; import android.content.Context; import android.content.res.Resources; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; import android.view.ViewGroup.LayoutParams; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; public class AdvancedJokeList extends SherlockActivity { private static final String TAG = "MyActivity"; /** Contains the name of the Author for the jokes. */ protected String m_strAuthorName; /** Contains the list of Jokes the Activity will present to the user. */ protected ArrayList&lt;Joke&gt; m_arrJokeList; /** Contains the list of filtered Jokes the Activity will present to the user. */ protected ArrayList&lt;Joke&gt; m_arrFilteredJokeList; /** Adapter used to bind an AdapterView to List of Jokes. */ protected JokeListAdapter m_jokeAdapter; /** ViewGroup used for maintaining a list of Views that each display Jokes. */ protected ListView m_vwJokeLayout; /** EditText used for entering text for a new Joke to be added to m_arrJokeList. */ protected EditText m_vwJokeEditText; protected ActionMode mActionMode=null; /** Button used for creating and adding a new Joke to m_arrJokeList using the * text entered in m_vwJokeEditText. */ protected Button m_vwJokeButton; //protected TextView m_vwJokeTextView; /** Menu used for filtering Jokes. */ protected Menu m_vwMenu; /** Background Color values used for alternating between light and dark rows * of Jokes. Add a third for text color if necessary. */ protected int m_nDarkColor; protected int m_nLightColor; protected int m_nTextColor; /** * Context-Menu MenuItem IDs. * IMPORTANT: You must use these when creating your MenuItems or the tests * used to grade your submission will fail. These are commented out for now. */ //protected static final int FILTER = Menu.FIRST; //protected static final int FILTER_LIKE = SubMenu.FIRST; //protected static final int FILTER_DISLIKE = SubMenu.FIRST + 1; //protected static final int FILTER_UNRATED = SubMenu.FIRST + 2; //protected static final int FILTER_SHOW_ALL = SubMenu.FIRST + 3; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initLayout(); Resources res = this.getResources(); m_arrJokeList = new ArrayList&lt;Joke&gt;(); m_jokeAdapter = new JokeListAdapter(getApplicationContext(), m_arrJokeList); m_vwJokeLayout.setAdapter(m_jokeAdapter); String author = res.getString(R.string.author_name); String[] jokeString = res.getStringArray(R.array.jokeList); for (int i=0; i&lt;jokeString.length; i++) { addJoke(new Joke(jokeString[i],author)); } initAddJokeListeners(); //m_vwJokeLayout.setLongClickable(true); //m_vwJokeLayout.setFocusable(false); m_vwJokeLayout.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View v) { Toast.makeText(AdvancedJokeList.this, "long click", Toast.LENGTH_LONG).show(); if (mActionMode != null) { return false; } else { mActionMode = AdvancedJokeList.this.startActionMode(mActionModeCallback); v.setSelected(true); return true; } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater mi = getSupportMenuInflater(); mi.inflate(R.menu.mainmenu, menu); m_vwMenu = menu; return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem Item) { m_arrFilteredJokeList = new ArrayList&lt;Joke&gt;(); m_arrFilteredJokeList.clear(); switch (Item.getItemId()) { case R.id.menu_filter : //Toast.makeText(this, "Filter Jokes", Toast.LENGTH_LONG).show(); break; case R.id.submenu_like : for (Joke i : m_arrJokeList) { if (i.getRating()==1) m_arrFilteredJokeList.add(i); } m_jokeAdapter = new JokeListAdapter(getApplicationContext(), m_arrFilteredJokeList); break; case R.id.submenu_dislike : for (Joke i : m_arrJokeList) { if (i.getRating()==2) m_arrFilteredJokeList.add(i); } m_jokeAdapter = new JokeListAdapter(getApplicationContext(), m_arrFilteredJokeList); //m_jokeAdapter.notifyDataSetChanged(); break; case R.id.submenu_unrated : for (Joke i : m_arrJokeList) { if (i.getRating()==0) m_arrFilteredJokeList.add(i); } m_jokeAdapter = new JokeListAdapter(getApplicationContext(), m_arrFilteredJokeList); break; case R.id.submenu_show_all : m_jokeAdapter = new JokeListAdapter(getApplicationContext(), m_arrJokeList); break; } m_jokeAdapter.notifyDataSetChanged(); m_vwJokeLayout.setAdapter(m_jokeAdapter); return true; } private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() { @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { // TODO Auto-generated method stub return false; } @Override public void onDestroyActionMode(ActionMode mode) { mActionMode = null; } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { MenuInflater mi = mode.getMenuInflater(); mi.inflate(R.menu.actionmenu, menu); return true; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId()) { case R.id.menu_remove : } return false; } }; /** * Method is used to encapsulate the code that initializes and sets the * Layout for this Activity. * @param v_mwJokeLayout */ protected void initLayout() { setContentView(R.layout.advanced); m_vwJokeLayout = (ListView) findViewById(R.id.jokeListViewGroup); m_vwJokeEditText = (EditText) findViewById(R.id.newJokeEditText); m_vwJokeButton = (Button) findViewById(R.id.addJokeButton); } /** * Method is used to encapsulate the code that initializes and sets the * Event Listeners which will respond to requests to "Add" a new Joke to the * list. */ protected void initAddJokeListeners() { m_vwJokeButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String textInput = m_vwJokeEditText.getText().toString(); m_vwJokeEditText.setText(""); addJoke(new Joke(textInput,"")); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(m_vwJokeEditText.getWindowToken(), 0); } }); } /** * Method used for encapsulating the logic necessary to properly add a new * Joke to m_arrJokeList, and display it on screen. * * @param joke * The Joke to add to list of Jokes. */ protected void addJoke(Joke joke) { //Joke joke = new Joke(strJoke); m_arrJokeList.add(joke); m_jokeAdapter.notifyDataSetChanged(); Log.d(TAG, "Adding new joke:" + joke.getJoke()); //setContentView(m_vwJokeLayout); } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload