gpt4 book ai didi

Android::如何读取 ListView 的不可见子元素?

转载 作者:行者123 更新时间:2023-11-29 18:20:46 25 4
gpt4 key购买 nike

我有一个 ListView ,其中包含来自数据库的大约 20 个奇数项目以及两个按钮和一个额外的 TextView 作为包含在线性布局中的计数器。这两个按钮通常用于增加和减少额外 TextView 中的值。我想要的是当我在 listView 外按下按钮时应该获取所有项目以及额外文本的值。现在我可以获取线性布局并且屏幕上可见子项目,即屏幕上可见 20 个项目 10,所以我的问题是如何获取剩余项目以及线性布局中不可见的额外 Textview 值滚动Listview时可以查看吗?

这是main.xml文件

   <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation= "horizontal"
android:layout_width="match_parent" android:layout_height="match_parent"
android:background="#CBCBCB">

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget64"
android:background="@drawable/toolbar_color"
android:layout_x="0px"
android:layout_y="0px"
android:layout_width="match_parent" android:layout_height="40dip">
<Button
android:id="@+id/save_creature_for_encounter"
android:layout_marginTop="5px"
android:textSize="10dip"
android:textColor="#ffffff"
android:textStyle="bold"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:background="@drawable/onclick_button_bg"
android:layout_width="40dip" android:layout_height="50dip"
android:text="Save"/>

<Button
android:id="@+id/back_show_encounter"
android:layout_width="80dip"
android:layout_marginTop="5px"
android:text="Cancel"
android:textSize="10dip"
android:textColor="#ffffff"
android:textStyle="bold"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:background="@drawable/button_color"
android:layout_height="50dip">
</Button>
</RelativeLayout>

<ListView
android:id="@+id/list_view"
android:background="#ffffff"
android:fadingEdge="none"
android:cacheColorHint="#ffffff"
android:layout_weight="1"
android:layout_gravity="center"
android:scrollbars="vertical"
android:layout_marginTop="28dip" android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</FrameLayout>

这是我的 custom_list.xml 文件

        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="left|center"
android:paddingBottom="5px"
android:paddingTop="5px" android:paddingLeft="5px" android:layout_width="wrap_content" android:layout_height="wrap_content">
<TextView android:text="test" android:id="@+id/item_creatures_to_encounter"
android:layout_marginLeft="10px" android:layout_width="180dip" android:layout_height="wrap_content"></TextView>
<Button
android:id="@+id/desc"
android:layout_width="30px"
android:layout_height="30px"
android:layout_marginTop="5px"
android:text="-"
android:textSize="10dip"
android:textColor="#ffffff"
android:textStyle="bold"
android:layout_alignTop="@+id/widget66"
android:layout_alignParentRight="true"
android:onClick="myDescClickHandler">
>
</Button>
<Button
android:id="@+id/asc"
android:layout_width="30px"
android:layout_height="30px"
android:layout_marginTop="5px"
android:text="+"
android:textSize="10dip"
android:textColor="#ffffff"
android:textStyle="bold"
android:layout_alignTop="@+id/widget66"
android:layout_alignParentRight="true"
android:onClick="myAscClickHandler">

>
</Button>

<TextView android:text="@string/counter" android:id="@+id/counter"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip" android:layout_width="30dip"></TextView>
</LinearLayout>

enter image description here

这是我的自定义适配器文件

   public class DomainAdapter extends SimpleCursorAdapter{

private LayoutInflater mInflater;


public DomainAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
super(context, layout, c, from, to);
mInflater = LayoutInflater.from(context);
}

public View getView(int position, View convertView, ViewGroup parent, Cursor data) {
// A ViewHolder keeps references to children views to avoid unneccessary calls
// to findViewById() on each row.
//final ViewHolder holder;
View row = super.getView(position, convertView, parent);
ViewHolder holder=(ViewHolder)row.getTag();
if (holder == null) {
holder = new ViewHolder(row);
row.setTag(holder);
holder.add = (Button) row.findViewById(R.id.asc);
Button.OnClickListener b =
new Button.OnClickListener() {
public void onClick(View v) {
LinearLayout parent = (LinearLayout)v.getParent();
TextView label=(TextView)parent.findViewById(R.id.counter);
Log.d("AAAAJJJAAA", ""+ parent);
CharSequence value = ((TextView) label).getText();
int count = Integer.parseInt((String) value);
count++;
String inc = String.format("%d", count);
label.setText(inc);
//parent.refreshDrawableState();
}
};
holder.add.setOnClickListener(b);
}
return row;
}

}

最佳答案

可见区域外的View不存在。 ListView 仅创建屏幕上的 View 数量。

当你滚动时,一个 View 消失了,它会重新使用那个 View 。它实际上要求 Adapter 修改 View 的参数,并使用修改后的 View。

例子:

让 view1 成为您的第一行(文字是头像)。向下滚动时,“头像”消失,底部会出现一个新头像。 ListView 不再需要 view1,因为它不可见。因此它将 view1 提供给 Adapter 并要求它修改 view1 的参数以成为新行。适配器将 view1 上的文本设置为下一行(例如“human”)并将其返回到 ListView。 ListView 将在列表底部显示 view1。

所以基本上可见区域之外的 View 不存在。

您可以做什么:当用户按下 + 或 - 按钮时,将计数保存到适配器。

然后您可以请求数据项 (listView.getItemAtPosition(int position)) 并计算它们。

代码示例:

class DataForView {
int counter;
}

ListView mListView;
...

int sumCounter = 0;
for (int i=0; i<mListView.getCount(); i++) {
sumCounter += ((DataForView)mListView.getItem(i)).counter;
}

查看以下自定义适配器教程:

http://commonsware.com/Android/excerpt.pdf

关于Android::如何读取 ListView 的不可见子元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5631895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com