在Android中设置值和获取listview中所有项的值

3
我有一个名为ListView的东西:
<ListView
        android:id="@+id/list"
        android:layout_width="290dp"
        android:layout_height="166dp"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="10dp"
        android:visibility="gone"
        android:choiceMode="singleChoice" />

还有一个名为ImageView的组件

<ImageView
        android:id="@+id/cont"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="30dp"
        android:src="@drawable/img" />  

如何在我的 ListView 中添加数据。
  ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, android.R.id.text1, list);
            listView.setAdapter(adapter);
            listView.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {


                }
            });

我正在尝试更新列表视图的值:

View v=listView.getChildAt(position);
                    TextView tv= (TextView) v.findViewById(android.R.id.text1);
                    tv.setText(firstNameDialog.getText().toString().trim().toString()+" "+lastNameDialog.getText().toString().trim().toString());

但这并不改变值

我希望当图像视图被点击时,我可以获取列表项的值并以数组形式存储。如何获取所有列表项的值,并如何在点击的项目上再次设置值?


只需使用ImageView onClick,您就已经拥有了list中的ListView数据。 - Niranj Patel
实际上,在适配器设置了listview值之后,我会在每个项目的点击事件中设置新数据。或者可以说,我在点击时更改了项目的数据。 - user2545733
点击列表项时,我会打开一个自定义对话框。在其中有一个编辑文本框,用户输入名称后,我会将该名称设置为用户从ListView中单击的项。 - user2545733
在更改后,您可以将数据存储在任何地方。因此,请使用该方法。 - Niranj Patel
5个回答

1
imageView.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                int count = listView.getAdapter().getCount();
                String[] listData = new String[count];
                for (int i = 0; i < count; i++) {
                    listData[i] = listView.getAdapter().getItem(i).toString();
                }
            }
        });

设置项目的值怎么样?我有位置。 - user2545733
1
@用户没听懂你的意思...现在怎么办? - Niranj Patel
我想问一下,如果我有列表项的位置,那么如何在ListView上设置该项的文本? - user2545733
你正在使用列表来显示数据,所以要在列表中进行更改,例如list[position]="你的值",然后设置adapater.notifyDataSetChanged()。 - Niranj Patel
如果我这样做,它会显示错误:“表达式的类型必须是数组类型,但解析为ListView”。 - user2545733

0

如果要更改列表项的值,应该在适配器类中完成。 因此,如果您的项目具有 TextView,则应在适配器中编写以下方法

public void changeText(String newValue) {
this.myTextView.setText(newValue);
}

当使用视图持有者时,也是这种情况。 要获取所有项目的值,基本上应该按照第一个答案所说的做。

imageView.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { int count = listView.getAdapter().getCount(); String[] listData = new String[count]; for (int i = 0; i < count; i++) { listData[i] = listView.getAdapter().getItem(i).toString(); } } }); 但除了 getCount,你也可以使用 size()。 但至少对我来说,适配器和列表之间的关系有点混淆。 希望能帮到你。


0
int wantedPosition = position; // Whatever position you're looking for
int firstPosition = mList.getFirstVisiblePosition() -mList.getHeaderViewsCount();

int wantedChild = wantedPosition - firstPosition;
if (wantedChild < 0 || wantedChild >= mList.getChildCount()) {
    return;
}

Button btnEdit = (Button)wantedView.findViewById(R.id.btnEdit);
btnEdit.setText("my new message");

你尝试过类似这样的东西吗?


0

使用 adapter。在循环中从适配器获取值:

StringBuilder b = new StringBuilder();
for(int i=0;i>adapter.getCount();i++)
    b.append(adapter.getItem(i));//May be toString() should be used.

1
这应该是 i < adapter.getCount();。按照当前的状态,这是一个无限循环。 - Lucas
这不是一个无限循环 - 它将永远不会到达 append 语句,因为除非适配器的计数为“-1”,否则 i 整数(从0开始)永远不会大于 adapter.getCount() - Mike Baxter

0

这个过程非常简单,你需要做的是,在点击图像查看器时,通过迭代你用来填充列表视图的数组适配器。在迭代过程中,你可以声明一个数组,并将迭代的值插入其中。希望能对你有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接