所以我有一个ListView
,它是通过自定义适配器从ArrayList<>
对象填充的。
ListView
中的每一行都是一个水平布局,其中包含TextView
小部件和Button小部件。此0
中可以有2
和ListView
行。
我希望能够在onClick
上使用Button
方法,这样我就可以转到onClick
点击Button
位置的方法列表(即它是在第1行还是第2行?)
这是包含XML
的页面的ListView
(此处列出的按钮与此问题无关)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:orientation="vertical"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="20dp"
android:text="Saved Offer Leaflets"
android:textStyle="bold"
android:textSize="30dp"/>
<ListView
android:id="@+id/listViewPdfs"
android:layout_width="match_parent"
android:layout_height="100dp" />
<Button
android:layout_height="100dp"
android:layout_width="match_parent"
android:text="Check for latest offers"
android:textSize="20dp"
android:id="@+id/buttonCheckLatestOffers"
/>
这是我的适配器列表项
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="20dp"
android:textSize="20dp"
android:text="date" />
<Button
android:layout_height="match_parent"
android:id="@+id/buttonOpenPdf"
android:layout_width="wrap_content"
android:text="Open"
/>
</LinearLayout>
</LinearLayout>
答案 0 :(得分:1)
不幸的是,如果您需要物品的位置。建议不要将onClick
功能放在XML
中,而是将Activity
声明在您将适配器设置为ListView
的{{1}}范围内。
一个通用的例子是:
listview.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?>adapter,View v, int position){
ItemClicked item = adapter.getItemAtPosition(position);
//Logic for click of ItemView
}
});
因此对于像你这样的案例,你需要确定点击实例是否在你的按钮之上,所以要应用逻辑正确,你需要使用Switch
语句来确定是否您已在Button
内选择了onItemClickListener
。
所以,它看起来像这样:
listview.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?>adapter,View v, int position){
ItemClicked item = adapter.getItemAtPosition(position);
switch (v.getId()) {
case R.id.buttonid:
//button click logic here
break;
}
});
注意:确保适配器中的getItem
功能正常运行。
public ItemClicked getItem(int position){
return arraylist.get(position);
}
答案 1 :(得分:0)
一个小例子:
int selectedItemPos = -1;
public void initUI(){
ListView myListView = (ListView)findViewById(R.id.listViewPdfs);
myListView.setAdapter(/*provide the data to the adapter*/);
myListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adpterView, View view,
int position, long id) {
selectedItemPos = position;
}
});
[...]
myButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (selectedItemPos != -1){
//selectedItemPos = 0 means first row of listview
//has been selected and so on, do what you want with it
}
}
});
}
正如其他人所说的那样,它有很多重复的东西。