Onclick button not working in listview

My project contains listView (homelistView) which contains a button (btnList) .

When I click the (btnList) button, it should go to another action. I tried a lot, but I did not find a good example.

Please offer me a good example.

Below is my code:

Here is my list contains a button. When a button is pressed, it should go into another activity.

--------------------------------A-- text text button(btnList) B --------------------------------C--- text text BUTTON(btnList) D --------------------------------E-- 

homempleb.xml

Before using this code in xml. buttonlist worked fine for me as shown below.

  <ListView android:id="@+id/homelistView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1.04" android:dividerHeight="0dip" > </ListView> EfficientAdapter.java public EfficientAdapter(Context context) { mInflater = LayoutInflater.from(context); this.context=context; } In your ViewHolder class you need to add `Button btnList.` holder.btnList.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent next=new Intent(context, SeviceDetails.class); context.startActivity(next); } }); 

homempleb.xml

Currently, I have added a scroll index to my list and changed the code as shown below. Listbutton is now not working for me. Plz help me, you can see the code for quick reference in the EfficientAdapter.JAVA -----> getview method ---> holder.btnList.

  <com.woozzu.android.widget.IndexableListView android:id="@+id/homelistView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1.04" android:dividerHeight="0dip" > </com.woozzu.android.widget.IndexableListView> 

MainActivity.java

  public class MainActivity extends Activity implements SearchView.OnQueryTextListener, SearchView.OnCloseListener { private ListView listView; // private IndexableListView listView; private SearchView search; EfficientAdapter objectAdapter; // EfficientAdapter2 objectAdapter1; int textlength = 0; private CheckBox checkStat, checkRoutine, checkTat; private ArrayList<Patient> patientListArray; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.homempleb); Log.i("scan", " txtScanResult "); ActionItem nextItem = new ActionItem(); final QuickAction quickAction = new QuickAction(this, QuickAction.VERTICAL); quickAction.addActionItem(nextItem); quickAction.setOnDismissListener(new QuickAction.OnDismissListener() { @Override public void onDismiss() { Toast.makeText(getApplicationContext(), "Dismissed", Toast.LENGTH_SHORT).show(); } }); search = (SearchView) findViewById(R.id.searchView1); search.setIconifiedByDefault(false); search.setOnQueryTextListener(this); search.setOnCloseListener(this); search.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { quickAction.show(v); } }); checkStat = (CheckBox) findViewById(R.id.checkBoxStat); checkRoutine = (CheckBox) findViewById(R.id.checkBoxRoutine); checkTat = (CheckBox) findViewById(R.id.checkBoxTat); checkStat.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (((CheckBox) v).isChecked()) { checkStat.setChecked(true); Toast.makeText(MainActivity.this, "STAT", Toast.LENGTH_SHORT).show(); checkRoutine.setChecked(false); checkTat.setChecked(false); } } }); checkRoutine.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (((CheckBox) v).isChecked()) { checkRoutine.setChecked(true); Toast.makeText(MainActivity.this, "ROUTINE", Toast.LENGTH_SHORT).show(); checkStat.setChecked(false); checkTat.setChecked(false); } } }); checkTat.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (((CheckBox) v).isChecked()) { checkTat.setChecked(true); Toast.makeText(MainActivity.this, "TAT Effeciency", Toast.LENGTH_SHORT).show(); checkRoutine.setChecked(false); checkStat.setChecked(false); } } }); // listView = (IndexableListView) findViewById(R.id.homelistView); listView = (ListView) findViewById(R.id.homelistView); listView.setTextFilterEnabled(true); listView.setFastScrollEnabled(true); listView.setFastScrollAlwaysVisible(true); objectAdapter = new EfficientAdapter(this); listView.setAdapter(objectAdapter); Button refreshButton = (Button) findViewById(R.id.refreshButton); refreshButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // objectAdapter1 = new EfficientAdapter2(MainActivity.this); objectAdapter = new EfficientAdapter(MainActivity.this);// adapter // with // new // data listView.setAdapter(objectAdapter); Log.i("notifyDataSetChanged", "data updated"); // objectAdapter1.notifyDataSetChanged(); objectAdapter.notifyDataSetChanged(); } }); } @Override public boolean onClose() { return false; } @Override public boolean onQueryTextChange(String newText) { return false; } @Override public boolean onQueryTextSubmit(String query) { return false; } 

}

EfficientAdapter.JAVA

  public class EfficientAdapter extends BaseAdapter implements SectionIndexer { private String mSections = "#ABCDEFGHIJKLMNOPQRSTUVWXYZ"; ArrayList<Patient> patientListArray; private LayoutInflater mInflater; private Context context; 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); } } /** * sorting the patientListArray data */ public void sortMyData() { // sorting the patientListArray data Collections.sort(patientListArray, new Comparator<Object>() { @Override public int compare(Object o1, Object o2) { Patient p1 = (Patient) o1; Patient p2 = (Patient) o2; return p1.getName().compareToIgnoreCase(p2.getName()); } }); } public int getCount() { return patientListArray.size(); } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.homemplebrowview, null); holder = new ViewHolder(); holder.text1 = (TextView) convertView.findViewById(R.id.name); holder.text2 = (TextView) convertView.findViewById(R.id.mrn); holder.text3 = (TextView) convertView.findViewById(R.id.date); holder.text4 = (TextView) convertView.findViewById(R.id.age); holder.text5 = (TextView) convertView.findViewById(R.id.gender); holder.text6 = (TextView) convertView.findViewById(R.id.wardno); holder.text7 = (TextView) convertView.findViewById(R.id.roomno); holder.text8 = (TextView) convertView.findViewById(R.id.bedno); holder.btnList = (Button) convertView.findViewById(R.id.listbutton); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.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() { @Override public void onClick(View v) { Toast.makeText(context, "STAT", Toast.LENGTH_SHORT).show(); Intent next = new Intent(context, Home.class); Log.i("next23", "next"); context.startActivity(next); } }); return convertView; } 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) { // sorting the patientListArray data sortMyData(); // 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) { // For numeric section for (int k = 0; k <= 9; k++) { if (StringMatcher.match( String.valueOf(patientListArray.get(j) .getName().charAt(0)), String.valueOf(k))) 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; } } 
+1
android android-layout android-intent android-emulator android-widget
Sep 27 '12 at 13:01
source share
3 answers

In an efficient adapter class, declare the ViewHolder holder outside the getView method and do as Mosh Yersan said.

Also change

 convertView = mInflater.inflate(R.layout.homemplebrowview, null); 

to

 convertView = mInflater.inflate(R.layout.homemplebrowview, parent,false); 
+1
Sep 28 '12 at 4:59
source share

The problem is the onInterceptTouchEvent method. You are using an IndexableListView from woozzu, and this class overrides onInterceptTouchEvent to return true. This means that IndexableListView always steals touch events from your child views so that it can provide it to IndexScroller . You can change this behavior if, instead of returning true, you enter this condition:

 @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (mScroller != null && mScroller.contains(ev.getX(), ev.getY())) return true; return super.onInterceptTouchEvent(ev); } 

Therefore, only events intended to interact with IndexScroller will be used. Other events will extend to children's presentations, and your button will be available.

+2
Apr 23 '14 at 21:09
source share

in your adapter, just move

 holder.btnList.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context, "STAT", Toast.LENGTH_SHORT).show(); Intent next = new Intent(context, Home.class); Log.i("next23", "next"); context.startActivity(next); } }); 

before return convertView; you need to install a listener every time the adapter returns a view.

0
Sep 27 '12 at 13:05
source share



All Articles