Ich möchte ein onClick
-Ereignis für Schaltflächen hinzufügen, die im Element von Listview
..__ verwendet werden. Wie kann ich ein onClick
-Ereignis für Schaltflächen in Listenelement angeben?.
Sie können das Ereignis onClick
in der Methode getView
Ihres benutzerdefinierten Adapters festlegen.
Überprüfen Sie den Link http://androidforbeginners.blogspot.it/2010/03/clicking-buttons-in-listview-row.html
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
View row = inflater.inflate(R.layout.vehicals_details_row, parent, false);
Button deleteImageView = (Button) row.findViewById(R.id.DeleteImageView);
deleteImageView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//...
}
});
}
Sie können aber eine nicht anklickbare Ausgabe- listView-Zeile erhalten . Lösung:
Android:focusable="true"
Android:focusable="false"
Versuche dies,
public View getView(final int position, View convertView,ViewGroup parent)
{
if(convertView == null)
{
LayoutInflater inflater = getLayoutInflater();
convertView = (LinearLayout)inflater.inflate(R.layout.YOUR_LAYOUT, null);
}
Button Button1= (Button) convertView .findViewById(R.id.BUTTON1_ID);
Button1.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// Your code that you want to execute on this button click
}
});
return convertView ;
}
Es kann dir helfen ....
In Ihrem benutzerdefinierten Adapter in der getView-Methode:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Do things Here
}
});
Ich gehe davon aus, dass Sie einen benutzerdefinierten Adapter für Ihre ListView definiert haben.
In diesem Fall können Sie onClickListener
für Ihre Schaltfläche in der getView()
-Methode des benutzerdefinierten Adapters zuweisen.
Dies wurde in vielen Beiträgen diskutiert, aber ich konnte immer noch keine Lösung finden mit:
Android:focusable="false"
Android:focusableInTouchMode="false"
Android:focusableInTouchMode="false"
Die folgende Lösung funktioniert mit allen UI-Komponenten: Button, ImageButtons, ImageView, Textview. LinearLayout, RelativeLayout klickt in eine Listview-Zelle und reagiert auch auf onItemClick:
Adapterklasse - getview ():
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
view = lInflater.inflate(R.layout.my_ref_row, parent, false);
}
final Organization currentOrg = organizationlist.get(position).getOrganization();
TextView name = (TextView) view.findViewById(R.id.name);
Button btn = (Button) view.findViewById(R.id.btn_check);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
context.doSelection(currentOrg);
}
});
if(currentOrg.isSelected()){
btn.setBackgroundResource(R.drawable.sub_search_tick);
}else{
btn.setBackgroundResource(R.drawable.sub_search_tick_box);
}
}
In diesem Bereich können Sie den angeklickten Button zur Aktivität bringen. (Insbesondere wenn Sie möchten, dass die Schaltfläche als Kontrollkästchen mit ausgewählten und nicht ausgewählten Status fungiert):
public void doSelection(Organization currentOrg) {
Log.e("Btn clicked ", currentOrg.getOrgName());
if (currentOrg.isSelected() == false) {
currentOrg.setSelected(true);
} else {
currentOrg.setSelected(false);
}
adapter.notifyDataSetChanged();
}
Klasse für ArrayList & ArrayAdapter
class RequestClass {
private String Id;
private String BookingTime;
private String UserName;
private String Rating;
public RequestClass(String Id,String bookingTime,String userName,String rating){
this.Id=Id;
this.BookingTime=bookingTime;
this.UserName=userName;
this.Rating=rating;
}
public String getId(){return Id; }
public String getBookingTime(){return BookingTime; }
public String getUserName(){return UserName; }
public String getRating(){return Rating; }
}
Hauptaktivität:
ArrayList<RequestClass> _requestList;
_requestList=new ArrayList<>();
try {
JSONObject jsonobject = new JSONObject(result);
JSONArray JO = jsonobject.getJSONArray("Record");
JSONObject object;
for (int i = 0; i < JO.length(); i++) {
object = (JSONObject) JO.get(i);
_requestList.add(new RequestClass( object.optString("playerID"),object.optString("booking_time"),
object.optString("username"),object.optString("rate") ));
}//end of for loop
RequestCustomAdapter adapter = new RequestCustomAdapter(context, R.layout.requestlayout, _requestList);
listView.setAdapter(adapter);
Benutzerdefinierte Adapterklasse
import Android.content.Context;
import Android.support.annotation.NonNull;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.ArrayAdapter;
import Android.widget.Button;
import Android.widget.RelativeLayout;
import Android.widget.TextView;
import Android.widget.Toast;
import Java.util.ArrayList;
/**
* Created by wajid on 1/12/2018.
*/
class RequestCustomAdapter extends ArrayAdapter<RequestClass> {
Context mContext;
int mResource;
public RequestCustomAdapter(Context context, int resource,ArrayList<RequestClass> objects) {
super(context, resource, objects);
mContext=context;
mResource=resource;
}
public static class ViewHolder{
RelativeLayout _layout;
TextView _bookingTime;
TextView _ratingTextView;
TextView _userNameTextView;
Button acceptButton;
Button _rejectButton;
}
@NonNull
@Override
public View getView(final int position, View convertView, ViewGroup parent){
final ViewHolder holder;
if(convertView == null) {
LayoutInflater inflater=LayoutInflater.from(mContext);
convertView=inflater.inflate(mResource,parent,false);
holder=new ViewHolder();
holder._layout = convertView.findViewById(R.id.requestLayout);
holder._bookingTime = convertView.findViewById(R.id.bookingTime);
holder._userNameTextView = convertView.findViewById(R.id.userName);
holder._ratingTextView = convertView.findViewById(R.id.rating);
holder.acceptButton = convertView.findViewById(R.id.AcceptRequestButton);
holder._rejectButton = convertView.findViewById(R.id.RejectRequestButton);
holder._rejectButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(mContext, holder._rejectButton.getText().toString(), Toast.LENGTH_SHORT).show();
}
});
holder.acceptButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(mContext, holder.acceptButton.getText().toString(), Toast.LENGTH_SHORT).show();
}
});
convertView.setTag(holder);
}
else{
holder=(ViewHolder)convertView.getTag();
}
holder._bookingTime.setText(getItem(position).getBookingTime());
if(!getItem(position).getUserName().equals("")){
holder._userNameTextView.setText(getItem(position).getUserName());
}
if(!getItem(position).getRating().equals("")){
holder._ratingTextView.setText(getItem(position).getRating());
}
return convertView;
}
}
ListView in Haupt-XML:
<ListView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:focusable="true"
Android:id="@+id/AllRequestListView">
</ListView>
Ressourcenlayout für Listenansicht requestlayout.xml:
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/requestLayout"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<TextView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:id="@+id/bookingTime"/>
<TextView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_below="@+id/bookingTime"
Android:text="Temp Name"
Android:id="@+id/userName"/>
<TextView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_below="@+id/userName"
Android:text="No Rating"
Android:id="@+id/rating"/>
<Button
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:id="@+id/AcceptRequestButton"
Android:focusable="false"
Android:layout_below="@+id/rating"
Android:text="Accept"/>
<Button
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:id="@+id/RejectRequestButton"
Android:layout_below="@+id/AcceptRequestButton"
Android:focusable="false"
Android:text="Reject"
/>
</RelativeLayout>
Ich finde
final Button yourButton = (Button)view.findViewById(R.id.your_button);
yourButton.setFocusable(false);
yourButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
...///);
kann das Problem lösen. Wenn Sie beim Klicken auf die Schaltfläche Daten erhalten möchten, ist die Verwendung von Tags hilfreich. Hier wird der Button als final deklariert, da er innerhalb der inneren Klasse verwendet wird.
In der getview-Methode setzen Sie den Listener außerhalb der Überprüfung der View..Try, um dies zu befolgen..Es hat in meinem Fall funktioniert .. Wie kann man den Wert von edittext in den Listenzeilen jeder Zeile erhöhen oder verringern?
FÜR KOTLIN-BENUTZER
in Ihrer getView (...) -Methode, wenn Sie versuchen, eine Aktivität über die Schaltfläche onClickListener zu starten:
myButton.setOnClickListener{
val intent = Intent([email protected], SecondActivity::class.Java)
startActivity(intent)
}
Übergeben Sie den richtigen Zeiger für "this"