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