How to use onclick button in baseAdapter

How to use click click button in extended baseadapter .. I have tried a lot, but not used. My project has a user list, it contains text, a button (btnlist), fastscroll index. when i click onclick (btnlist) button, it is not gng for other activity, also error is not displayed, no toasts ..
Plz help me with an example. thank you in advance.

Quick ref: getview ---> holder.btnList.setOnClickListener

EfficientAdapter.java

public class EfficientAdapter extends BaseAdapter implements SectionIndexer, OnClickListener { IndexableListView mListView; private String mSections = "#ABCDEFGHIJKLMNOPQRSTUVWXYZ"; ArrayList<Patient> patientListArray; private Intent intent; private Patient patient; private LayoutInflater mInflater; private Context context; private int positions; ViewHolder holder; public EfficientAdapter(Context context) { mInflater = LayoutInflater.from(context); this.context = context; String patientListJson = CountriesList.jsonData; JSONObject jssson; try { jssson = new JSONObject(patientListJson); patientListJson = jssson.getString("PostPatientDetailResult"); } catch (JSONException e) { e.printStackTrace(); } Gson gson = new Gson(); JsonParser parser = new JsonParser(); JsonArray Jarray = parser.parse(patientListJson).getAsJsonArray(); patientListArray = new ArrayList<Patient>(); for (JsonElement obj : Jarray) { Patient patientList = gson.fromJson(obj, Patient.class); patientListArray.add(patientList); // Log.i("patientList", patientListJson); } } public int getCount() { return patientListArray.size(); } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(final int position, View convertView, ViewGroup parent) { this.positions = position; View rowView = convertView; if (rowView == null) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); rowView = inflater.inflate(R.layout.homemplebrowview, parent, false); holder = new ViewHolder(); holder.text1 = (TextView) rowView.findViewById(R.id.name); holder.text2 = (TextView) rowView.findViewById(R.id.mrn); holder.text3 = (TextView) rowView.findViewById(R.id.date); holder.text4 = (TextView) rowView.findViewById(R.id.age); holder.text5 = (TextView) rowView.findViewById(R.id.gender); holder.text6 = (TextView) rowView.findViewById(R.id.wardno); holder.text7 = (TextView) rowView.findViewById(R.id.roomno); holder.text8 = (TextView) rowView.findViewById(R.id.bedno); holder.btnList = (Button) rowView.findViewById(R.id.listbutton); /*Button editButton = (Button) rowView.findViewById(R.id.listbutton) ; editButton.setTag(position); editButton.setClickable(true); editButton.setOnClickListener(EfficientAdapter.this); rowView.setClickable(true);*/ rowView.setTag(holder); } else { holder = (ViewHolder) rowView.getTag(); } holder.text1.setText(Util.formatN2H(patientListArray.get(position) .getName())); holder.text2.setText(patientListArray.get(position).getMrnNumber()); holder.text3.setText(Util.formatN2H(patientListArray.get(position) .getRoom())); holder.text4.setText(Util.formatN2H(patientListArray.get(position) .getAge())); holder.text5.setText(Util.formatN2H(patientListArray.get(position) .getGender())); holder.text6.setText(Util.formatN2H(patientListArray.get(position) .getWard())); holder.text7.setText(Util.formatN2H(patientListArray.get(position) .getRoom())); holder.text8.setText(Util.formatN2H(patientListArray.get(position) .getBed())); holder.btnList.setOnClickListener(new OnClickListener() { public void onClick(View v) { Toast.makeText(context, "STAT", Toast.LENGTH_SHORT).show(); Intent next = new Intent(context, SeviceDetails.class); Log.i("patient", " next "+ position + " onclickposition " + patientListArray.get(position).getMrnNumber()); patient = getPatientDetailsByMrn(patientListArray, position); Log.i("DDDD ", patient.getMrnNumber()); next.putExtra("patient", patient); next.putExtra("position", position); System.out.println("patient"+ patient); context.startActivity(next); } }); return rowView; } static class ViewHolder { public Button btnList; public TextView text8; public TextView text7; public TextView text6; public TextView text5; public TextView text4; public TextView text1; public TextView text2; public TextView text3; } @Override public void notifyDataSetChanged() { super.notifyDataSetChanged(); } public int getPositionForSection(int section) { sortMyData(); Log.i("getPositionForSection", "section" + section); // If there is no item for current section, previous section will be // selected for (int i = section; i >= 0; i--) { for (int j = 0; j < getCount(); j++) { if (i == 0) { Log.i("getPositionForSection- i", "section" + i); // For numeric section for (int k = 0; k <= 9; k++) { if (StringMatcher.match( String.valueOf(patientListArray.get(j) .getName().charAt(0)), String.valueOf(k))) Log.i("getPositionForSection- j", "section" + j); return j; } } else { if (StringMatcher.match( String.valueOf(patientListArray.get(j).getName() .charAt(0)), String.valueOf(mSections.charAt(i)))) return j; } } } return 0; } public int getSectionForPosition(int position) { return 0; } public Object[] getSections() { String[] sections = new String[mSections.length()]; for (int i = 0; i < mSections.length(); i++) sections[i] = String.valueOf(mSections.charAt(i)); return sections; } /** * sorting the patientListArray data */ public void sortMyData() { // sorting the patientListArray data Collections.sort(patientListArray, new Comparator<Object>() { @Override public int compare(Object k1, Object k2) { Patient p1 = (Patient) k1; Patient p2 = (Patient) k2; return p1.getName().compareToIgnoreCase(p2.getName()); } }); } } 

.xml

  <Button android:id="@+id/listbutton" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignTop="@+id/name" android:layout_marginRight="43dp" android:focusable="false" android:text="Episode" android:textColor="#666666" /> 

default list

  <ListView android:id="@+id/homelistView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:dividerHeight="0dip" /> 
+7
source share
4 answers

You must use your adapter to populate the list with elements. Then, in your activity or fragment, you must implement the onListItemClick event to handle a click on a list item.

EDIT: I am posting an example below where I use ListFragment - this is part of the code that I have now, I can post something specific to ListView later:

 public class RecipiesActivity extends FragmentActivity { private RecipiesSummaryListAdapter m_listAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* here you need to set the adapter of the listview and do other things for your applicaiton (ie populate the data in your adapter. In your case, since you are calling a WS you want to do that in a different task */ ListFragment lf = (ListFragment) fm.findFragmentById(R.id.my_list_fragment); lf.setListAdapter(m_listAdapter); } 

Then in ListFragment :

 /* imports and other things go here then... */ public class MyListFragment extends ListFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return (View) inflater.inflate(R.layout.myListViewXml, container, false); } @Override public void onListItemClick(ListView l, View v, int position, long id) { // put your handler here } } 

Learn more about ListFragment here .

I think a very good example (although the extension of the ArrayAdapter instead of BaseAdapter is represented by https://stackoverflow.com/a/3168379/) .

One thing to keep in mind:

  • The button should not focus (i.e. use XML android:focusable="false" - as in your XML).
  • You need to capture the onItemClick event as shown below (extract from the link above):

the code:

 listview.setOnItemClickListener(new OnItemClickListener() { //@Override public void onItemClick(AdapterView arg0, View view, int position, long id) { // user clicked a list item, make it "selected" selectedAdapter.setSelectedPosition(position); //Do your stuff here } 

Finally, pay attention to one point. This solution means that you click on the list bar and the event fires.

I think that if you want the user to click the button and the event to activate the button, you need to set the listview.setItemsCanFocus(true) call right after inflating the ListView XML file and make sure that the button is focusable in XML. Listening for the onClick event should work then.

This is described in slide 25 of the GoogleIO World of ListView presentation (you can get it here and video here )

Hope this helps

+6
source

try the following for your button:

 android:focusable="false" 
+3
source

use the following code in the getView () method:

  Button status = (Button) rowView.findViewById(R.id.image1); status.setBackgroundResource(R.drawable.add_account); status.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // DO your stuff } }); 
+2
source

Write holder.btnList.setOnClickListener inside the if (rowView == null) condition if (rowView == null) and try again.

+2
source

All Articles