1

I have created a Custom listview inside the AlertDialog and set data by parsing a list. I need to get the clicked value of the individual object of that clicked row. But listView.setOnItemClickListener is not working. I have tried to solve this problem, but couldn't find a way. Please help me to solve this.

Thanks..

here is my code

AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
            builder.setTitle("Select A Customer");
            //insert array to constructor
            LayoutInflater inflater = getActivity().getLayoutInflater();
            View dialogLayout = inflater.inflate(R.layout.product_list_pop_up, null);
            final CustomerPopupAdapter testAdapter = new CustomerPopupAdapter(getContext(), customers_data);
            ListView listView = dialogLayout.findViewById(R.id.product_list_view);
            TextView cancel_btn = dialogLayout.findViewById(R.id.cancel_btn);
            TextView done_btn = dialogLayout.findViewById(R.id.done_btn);
            listView.setAdapter(testAdapter);

            builder.setView(dialogLayout);

            final AlertDialog alert = builder.create();
            alert.show();

            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                    Log.d("selected Item", "ListView ");
//                    customerName = testAdapter.getItem(position);
//                    customer_name.setText((CharSequence) testAdapter.getItem(position));
                    alert.dismiss();
                }
            });
         alert.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
            WindowManager.LayoutParams lp = new WindowManager.LayoutParams();

            cancel_btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    alert.dismiss();
                }
            });

            done_btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    alert.dismiss();
                }
            });

here is my adapter

public class CustomerPopupAdapter extends ArrayAdapter<Customer> {

    private List<Customer> list;

    public CustomerPopupAdapter(Context context, List<Customer> test) {
        super(context, R.layout.discount_popup_row, test);
        this.list = test;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = LayoutInflater.from(getContext());

        final Customer customer = list.get(position);
        View customRow = inflater.inflate(R.layout.customer_popup_row, parent, false);

        TextView customer_name = customRow.findViewById(R.id.customer_name);
        TextView customer_id = customRow.findViewById(R.id.customer_id);

        customer_id.setText(customer.getId());
        customer_name.setText(customer.getName());

        return customRow;
    }
}

here is the custom_row.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/match_result"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="@dimen/activity_margin_10dp"
        android:weightSum="3">

        <TextView
            android:id="@+id/customer_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:text="Username"
            android:inputType="text"
            android:layout_weight="1"
            android:textColor="@color/colorBlack"
            android:textSize="@dimen/text_size_18sp" />


        <TextView
            android:id="@+id/customer_id"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:text="id"
            android:inputType="text"
            android:layout_weight="2"
            android:textColor="@color/colorBlack"
            android:textSize="@dimen/text_size_18sp" />
    </LinearLayout>

    <View
        android:id="@+id/bottom_border"
        android:layout_width="match_parent"
        android:layout_height="0.8dp"
        android:layout_marginTop="@dimen/activity_margin_5dp"
        android:background="@color/colorGrey" />

</LinearLayout>
Pasindu Weerakoon
  • 588
  • 1
  • 11
  • 39

5 Answers5

0

Use your customers_data list to get the clicked value.

           listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Log.d("selected Item", customers_data.get(position));
                    alert.dismiss();
                }
            });
Gokul Nath KP
  • 15,485
  • 24
  • 88
  • 126
0

You i am not sure why your code is not working if you can post the project that would be very really helpful or at least the whole activity ,so this is how you can easily display list in alert box .

// setup the alert builder
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Choose an animal");

// add a list
String[] animals = {"horse", "cow", "camel", "sheep", "goat"};
builder.setItems(animals, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        switch (which) {
            case 0: // horse
            case 1: // cow
            case 2: // camel
            case 3: // sheep
            case 4: // goat
        }
    }
});

// create and show the alert dialog
AlertDialog dialog = builder.create();
dialog.show();

Check the full reference https://stackoverflow.com/a/43532478/9638167

Raja Osama
  • 133
  • 10
  • I know this will work. But my scenario is different than this. I need to create a custom adapter inside my alert dialog. It is not simple like this. Thanks for your reply. But I can guarantee this cord will work for someone who does not want to create an adapter inside the alert dialog. – Pasindu Weerakoon Jun 30 '18 at 16:02
  • Give me the code of the activity and iwill make it work . – Raja Osama Jun 30 '18 at 16:25
0
  1. Don't use ListView, read this: Should we use RecyclerView to replace ListView? and other materials on google, RecyclerView is the way to go

  2. I think what you need is:

    lv.setOnItemClickListener(new OnItemClickListener(){
    
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
    { 
        //element selected is yourList.get(position);
    }
    });
    
Alexandru Sandu
  • 314
  • 2
  • 13
0

Actually, this is an answer for this question. I have added android: inputType="text" to the code. It was the problem. I removed it and then it works perfectly.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/match_result"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="@dimen/activity_margin_10dp"
        android:weightSum="3">

        <TextView
            android:id="@+id/customer_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:text="Username"
            android:layout_weight="1"
            android:textColor="@color/colorBlack"
            android:textSize="@dimen/text_size_18sp" />


        <TextView
            android:id="@+id/customer_id"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:text="id"
            android:layout_weight="2"
            android:textColor="@color/colorBlack"
            android:textSize="@dimen/text_size_18sp" />
    </LinearLayout>

    <View
        android:id="@+id/bottom_border"
        android:layout_width="match_parent"
        android:layout_height="0.8dp"
        android:layout_marginTop="@dimen/activity_margin_5dp"
        android:background="@color/colorGrey" />

</LinearLayout>

The answer was given by the "I_A_Mok", All the credits should goes to him.

Pasindu Weerakoon
  • 588
  • 1
  • 11
  • 39
0

Please remove the android:inputType="text" from your xml. this will solve your problem. Thanks.