Как сделать каждый элемент в ListView кликабельным таким образом, чтобы он вызывал другое действие? - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть коллекция, в которой есть список документов. Теперь я хотел бы отобразить список документов в виде интерактивных элементов в виде списка. Пока что у меня есть только часть Displaying.

Однако, как только элементы отображаются, как сделать каждый элемент кликабельным, чтобы значение выбранного элемента сохранялось в виде строки и передавалось следующему действию?

Это не дубликат, поскольку возможный дублирующий вопрос не дает поставщикам ответов, соответствующих моим конкретным потребностям.

XML-код:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".AttendanceCP">

    <ListView
        android:id="@+id/main_list"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Java-код:

public class AttendanceCP extends AppCompatActivity
{
    private static final String TAG = "AttendanceCP";

    private FirebaseFirestore db = FirebaseFirestore.getInstance();
    private CollectionReference dbUsers = db.collection("Faculty");

    private ListView mainlist;

    private String email="";
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_attendance_cp);
        mainlist=findViewById(R.id.main_list);
        email=PrefUtilities.with(this).getFacultyEmail();

        final DocumentReference dbDocs = dbUsers.document(email);

        dbDocs.addSnapshotListener(this, new EventListener<DocumentSnapshot>()
        {
            @Override
            public void onEvent(@Nullable DocumentSnapshot documentSnapshot, @Nullable FirebaseFirestoreException e)
            {
                if (documentSnapshot.exists())
                {
                    String Dept = documentSnapshot.getString(DEPT_NAME);
                    Attendance(Dept);
                }
            }
        });
    }
    public void Attendance(String Dept)
    {
        if(Dept.equals("CSE"))
        {
            dbUsers=db.collection("CSE");
        }
        if(Dept.equals("Civil"))
        {
            dbUsers=db.collection("Civil");
        }
        dbUsers.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>()
        {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task)
            {
                ArrayList<String> paper=new ArrayList<>();
                if (task.isSuccessful())
                {
                    for (QueryDocumentSnapshot document : task.getResult())
                    {
                        paper.add(document.getId());
                    }
                    Log.d(TAG, paper.toString());
                }
                else
                {
                    Log.d(TAG, "Error getting documents: ", task.getException());
                }
                ArrayAdapter<String> arrayAdapter =
                        new ArrayAdapter<>(AttendanceCP.this,android.R.layout.simple_list_item_1, paper);
                mainlist.setAdapter(arrayAdapter);
            }
        });
    }
}

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

используйте этот код

        mainlist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
            Intent intent = new Intent(this, YourActivity.class);
            intent.putExtra(key,position); // this line is for passing the position of selected Item to the new Activity. you may change it to other info.
            startActivity(intent);
        }
    });
0 голосов
/ 11 апреля 2019

добавьте прослушиватель кликов для просмотра списка.

     mainlist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                      String item = arrayAdapter.getItem(position)
                    }
                });
...