我有一个问题,我想单击ListView列表元素中的按钮后获取文本。我尝试了onItemClickListener的方式,但可能使用不当,将其放在错误的位置,暂时将其删除。问题-怎么做?
我是Java的新手程序员,所以我的代码可能有点弱。 预先感谢您的帮助。
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" />
答案 0 :(得分:0)
您可以将OnItemClickListener添加到列表项。这是一个类似问题的链接,该问题应可为您提供帮助:
答案 1 :(得分:0)
您可以将onItemClickListener()
添加到listView
上的fullListView()
。
这是根据您的代码提供的示例。
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);
}
});
}
答案 2 :(得分:0)
尝试以下代码,希望对您有所帮助:
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();
}
});
}
答案 3 :(得分:0)
您可以使用studensList
根据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);
}
});
}