我有一个ListView
,其中每个项目是一个xml布局与(TextView
和Button
)。
我没有使用自定义适配器。那么如何为特定行中的Button设置OnClickListener
?
我的目的是在为该行单击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>
你为什么需要一个按钮?在项目点击中检索文本会更容易我认为...
顺便说一句,如果你想实现一个自定义适配器,它不是太复杂。 Here is a tutorial to do it
在给定的文章中,您将看到名为getView()
的回调。它是您在行和数据之间建立链接的地方。在这里你必须添加一个OnClickListener
到你的按钮。
你必须创建自定义listview适配器(如baseAdapter),这样你就可以轻松设置click on items按钮,但是现在你只使用了默认适配器,所以你可以在listview上添加onItemClickListener。
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//do your stuff
}
});
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();
}
});
}