Android: Как настроить OnClickListener для кнопки ListView? - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть ListView, в котором каждый элемент представляет собой XML-макет с (TextView и Button).

Я не использовал пользовательский Адаптер . Так как мне установить OnClickListener для кнопки в определенной строке?

Моя цель состоит в том, чтобы получить полный текст String из этой конкретной строки, если для этой строки щелкнуть Button.

ListView listView;
ArrayList<String> list;
ArrayAdapter<String> adapter;
Deal deal;

Примечание: я не использовал пользовательский адаптер. Я не знаю, как это использовать. Я новичок в этом.

        deal = new Deal();
        listView = (ListView)findViewById(R.id.listview);                                           
        firebaseDatabase = FirebaseDatabase.getInstance();
        databaseReference = firebaseDatabase.getReference();
        list = new ArrayList<>();
        adapter = new ArrayAdapter<String>(this, R.layout.deal_info, R.id.dealinfo, list);
        /*
          What if i have two TextViews in my deal_info.xml...
          what to do in that case?*/
        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for(DataSnapshot snapshot_of_deals: dataSnapshot.child("Deals").getChildren()){

                    deal = snapshot_of_deals.getValue(Deal.class);

                    list.add("NAME      : " + deal.getName() +"\n"+
                             "CONTACT   : " + deal.getContact() +"\n"+
                             "ADDRESS   : " + deal.getAddress() +"\n"+
                             "SOW[Date] : " + deal.getReap() +"\n"+
                             "REAP[Date]: " + deal.getSow() +"\n"+
                             "ID of deal: " + deal.getDateid());
                }
                listView.setAdapter(adapter);
            }

мой макет строки ( deal_info.xml ):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    ...
    ..>
    <TextView
        android:id="@+id/dealinfo"
        android:layout_width="282dp"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toEndOf="@+id/dealinfo"
        android:text="Accept" />
</RelativeLayout>

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

вам нужно создать пользовательский адаптер списка (например, baseAdapter), чтобы вы могли легко установить нажатие на кнопку элементов, но сейчас вы просто использовали адаптер по умолчанию, поэтому вы можете добавить onItemClickListener в список просмотра.

  list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                //do your stuff
            }
        });
0 голосов
/ 19 сентября 2018
 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override

        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            TextView textView = (TextView) view;
            String message =textView.getText().toString();
            Toast.makeText(this, message, Toast.LENGTH_LONG).show();
       }
    });
}
0 голосов
/ 17 сентября 2018

Зачем вам кнопка?Я думаю, было бы легче получить текст по нажатию элемента ...

Кстати, если вы хотите реализовать собственный адаптер, это не слишком сложно. Вот учебник для этого

В данной статье вы увидите обратный вызов с именем getView().Здесь вы делаете связь между строкой и данными.И именно здесь вы должны добавить OnClickListener к вашей кнопке.

...