webentwicklung-frage-antwort-db.com.de

Android: Ein onClick-Ereignis für Button in List in ListView einstellen

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?.

73
Sagar D

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

64
Nermeen

In Adapterklasse

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:

  • listView fokussierbar machen Android:focusable="true"
  • Taste nicht fokussierbar Android:focusable="false"
89
mukesh

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 .... 

12
Hemant

In Ihrem benutzerdefinierten Adapter in der getView-Methode:

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // Do things Here 
    }
});
3
magirtopcu

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.

1
Paresh Mayani

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();

    }
1
TharakaNirmana

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>
0
Wajid khan

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.

0
FrankJenq

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?

0
Aditya

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"

0
Asim