简体   繁体   中英

How to get the text after clicking the button in the position in the ListView?

I have a problem that I want to get text after clicking a button in the ListView list element. I tried the way with onItemClickListener, but I probably used it badly, I put it in the wrong place and removed it for the moment. Question - how to do it?

I'm a novice programmer in Java, so my code may be a bit weak. Thank you in advance for your help.

ListFragment.java

    public class ListFragment extends Fragment {

    View view;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_list, container, false);

        FloatingActionButton studentAdd = view.findViewById(R.id.studentAddToList);
        studentAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent myIntent = new Intent(view.getContext(), StudentAddToList.class);
                startActivity(myIntent);
            }
        });

        fillListView();

        return view;

    }

    class ListAdapter extends BaseAdapter {

        public ArrayList<Student> studentsList;
        private Context context;
        DatabaseHandler databaseHandler = new DatabaseHandler(getContext());

        public ListAdapter(ArrayList<Student> list, Context context) {
            this.studentsList = list;
            this.context = context;
        }

        @Override
        public int getCount() {
            return this.studentsList.size();
        }

        @Override
        public Object getItem(int position) {
            return this.studentsList.get(position);
        }

        @Override
        public long getItemId(int i) {
            return i;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;

            if (convertView == null) {

                LayoutInflater inf = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inf.inflate(R.layout.custom_list, null);

                holder = new ViewHolder();
                holder.studentId = (TextView) convertView.findViewById(R.id.studentId);
                holder.studentFullname = (TextView) convertView.findViewById(R.id.studentFullName);

                convertView.setTag(holder);

            } else {
                holder = (ViewHolder) convertView.getTag();
            }


            Student student = studentsList.get(position);
            holder.studentId.setText(student.getStudentID() + "");
            holder.studentFullname.setText(student.getFullname());

            return convertView;
        }

        private class ViewHolder {
            public TextView studentId;
            public TextView studentFullname;
        }

    }

    public void fillListView () {
        ListView listView = view.findViewById(R.id.listView);
        DatabaseHandler databaseHandler = new DatabaseHandler(view.getContext());

        ArrayList<Student> studentsList = databaseHandler.getStudents();

        ListAdapter listAdapter = new ListAdapter(studentsList, view.getContext());
        listView.setAdapter(listAdapter);
    }

}

    <TextView
    android:id="@+id/studentId"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:text="ID"
    android:textSize="24sp"
    android:textStyle="bold"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.069"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.041" />

custom_list.xml

<TextView
    android:id="@+id/studentFullName"
    android:layout_width="153dp"
    android:layout_height="32dp"
    android:layout_marginBottom="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:gravity="center_vertical"
    android:text="Full Name"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.339"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.042" />

<ImageButton
    android:id="@+id/studentDeleteFromList"
    android:layout_width="33dp"
    android:layout_height="29dp"
    android:layout_marginBottom="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:background="@null"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.937"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.04"
    app:srcCompat="@drawable/delete" />

You can add a OnItemClickListener to your list items. Here is a link to a similar question that should help you out:

setOnItemClickListener on custom ListView

You can add onItemClickListener() to listView on fullListView() .

Here's the sample according to your code.

public void fillListView () {
        ListView listView = view.findViewById(R.id.listView);
        DatabaseHandler databaseHandler = new DatabaseHandler(view.getContext());
        ArrayList<Student> studentsList = databaseHandler.getStudents();
        ListAdapter listAdapter = new ListAdapter(studentsList, view.getContext());
        listView.setAdapter(listAdapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
           @Override
           public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
              //here, replace with your list object and collect clicked items
              Object listItem = list.getItemAtPosition(position);
           } 
        });
}

Try this code hope it will help you:

public void fillListView () {
    ListView listView = view.findViewById(R.id.listView);
    DatabaseHandler databaseHandler = new DatabaseHandler(view.getContext());
    ArrayList<Student> studentsList = databaseHandler.getStudents();
    ListAdapter listAdapter = new ListAdapter(studentsList, view.getContext());
    listView.setAdapter(listAdapter);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
       @Override
       public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
          //here, replace with your list object and collect clicked items
          String name = adapterView.getItemAtPosition(i).toString();
          Toast.makeText(getApplicationContext,"text is :"+name, Toast.LENGTH_SHORT).show();
       } 
    });
 }

You can use studensList to get the item based on the position

   public void fillListView () {
            ListView listView = view.findViewById(R.id.listView);
            DatabaseHandler databaseHandler = new DatabaseHandler(view.getContext());
            ArrayList<Student> studentsList = databaseHandler.getStudents();
            ListAdapter listAdapter = new ListAdapter(studentsList, view.getContext());
            listView.setAdapter(listAdapter);

            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
               @Override
               public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                  final Student student = studentsList.get(pos);
               } 
            });
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM