Android 在ListView中单击其他项目时,如何访问其他项目的textview?

Android 在ListView中单击其他项目时,如何访问其他项目的textview?,android,android-listview,Android,Android Listview,我在listView项目布局中有一个隐藏的textView,单击该项目时,我将显示该隐藏的textView。但是,当我单击另一个项目时,我希望该项目中的另一个可见文本视图再次被隐藏。那么我如何访问其他项目的textView theListView.setOnItemClickListener( new AdapterView.OnItemClickListener() { @Override pub

我在listView项目布局中有一个隐藏的textView,单击该项目时,我将显示该隐藏的textView。但是,当我单击另一个项目时,我希望该项目中的另一个可见文本视图再次被隐藏。那么我如何访问其他项目的textView

theListView.setOnItemClickListener(
                new AdapterView.OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                            int position, long id) {

                        TextView itemView2 = (TextView)view.findViewById(R.id.textView2);
                        itemView2.setVisibility(View.VISIBLE);
                        itemView2.setBackgroundColor(color.white);

                        Double lat = Double.parseDouble(((KioskInfo)parent.getItemAtPosition(position)).getLat());
                        Double lng = Double.parseDouble(((KioskInfo)parent.getItemAtPosition(position)).getLng());
                        LatLng itemLocation = new LatLng(lat,lng);

                        googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(itemLocation, 18 ));

                    }
                        });
theListView.setOnItemClickListener(
新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
TextView itemView2=(TextView)view.findViewById(R.id.textView2);
itemView2.setVisibility(View.VISIBLE);
itemView2.setBackgroundColor(颜色:白色);
Double-lat=Double.parseDouble(((KioskInfo)parent.getItemAtPosition(position)).getLat();
Double lng=Double.parseDouble((KioskInfo)parent.getItemAtPosition(position)).getLng();
LatLng项目位置=新LatLng(lat,lng);
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(itemLocation,18));
}
});
item_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="7dp"
        android:textSize="15sp"
        android:textColor="@color/loginblue"></TextView>
      <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="7dp"
        android:textSize="12sp"
        android:visibility="gone"
        android:textColor="@color/loginblue"></TextView>

</LinearLayout>

您需要记住列表视图中所选项目的索引/位置。然后,如果选择了另一个项目,则测试是否已经存在另一个选定项目。如果是这样,您可以获得该项目的视图,如下所示:

// Hide previously selected text view
if (selectedIndex > -1) {
    int viewIndex = selectedIndex - listView.getFirstVisiblePosition();
    // if previously selected list item is still visible, hide its text view
    if (viewIndex > -1 && viewIndex < listView.getChildCount()) {
        View itemView = listView.getChildAt(viewIndex);
        TextView textView = itemView.findViewById(R.id.textView2);
        textView.setVisibility(View.GONE);
    }
}

// Now you make the newly selected text view visible and remember the selected item
selectedIndex = position;
//隐藏以前选择的文本视图
如果(已选择索引>-1){
int viewIndex=selectedIndex-listView.getFirstVisiblePosition();
//如果以前选择的列表项仍然可见,请隐藏其文本视图
如果(viewIndex>-1&&viewIndex
selectedIndex
是click listener或任何其他周围类的实例变量。使用
-1
初始化它,因为开头没有选择任何项目


显然,您可以优化代码。这只是为了阐明完成任务的基本步骤。

将其定义为活动中的成员变量

int clickedPosition = -1;
然后使用这个代码

            heListView.setOnItemClickListener(
                    new AdapterView.OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {

                            if(clickedPosition!= position && clickedPosition != -1){
                                clickedPosition = position;
                                View previousView = heListView.getChildAt(clickedPosition);
                                TextView itemView2 = (TextView)view.findViewById(R.id.textView2);
                                itemView2.setVisibility(View.INVISIBLE);
                            }
                            TextView itemView2 = (TextView)view.findViewById(R.id.textView2);
                            itemView2.setVisibility(View.VISIBLE);
                            itemView2.setBackgroundColor(color.white);

                            Double lat = Double.parseDouble(((KioskInfo)parent.getItemAtPosition(position)).getLat());
                            Double lng = Double.parseDouble(((KioskInfo)parent.getItemAtPosition(position)).getLng());
                            LatLng itemLocation = new LatLng(lat,lng);

                            googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(itemLocation, 18 ));

                        }
                            });
heListView.setOnItemClickListener(
新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
如果(clickedPosition!=位置&&clickedPosition!=-1){
单击位置=位置;
View-previousView=heListView.getChildAt(单击位置);
TextView itemView2=(TextView)view.findViewById(R.id.textView2);
itemView2.setVisibility(视图.不可见);
}
TextView itemView2=(TextView)view.findViewById(R.id.textView2);
itemView2.setVisibility(View.VISIBLE);
itemView2.setBackgroundColor(颜色:白色);
Double-lat=Double.parseDouble(((KioskInfo)parent.getItemAtPosition(position)).getLat();
Double lng=Double.parseDouble((KioskInfo)parent.getItemAtPosition(position)).getLng();
LatLng项目位置=新LatLng(lat,lng);
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(itemLocation,18));
}
});

您使用自定义适配器吗?谢谢,拉尔斯。在使用父参数更改listView之后,它工作了。然而,我正在用Techfist更新我已接受的答案。因为,它使用的代码更少。getFirstVisiblePosition是不必要的,让我有点困惑,还有签入if比getChildCount小。@FigenGüngör我对Techfirst的解决方案发表了评论,因为
getFirstVisiblePosition
操作可能会变得必要抱歉,Lars。我想我还没有测试好。谢谢你的解释。嗨,拉尔斯。当我的listview有很多项目,并且当我选择第一个项目时,第7个和第14个项目看起来也被单击了,我遇到了一个问题。原因可能是什么?您使用什么代码将项目标记为选中?我认为最好从这一点开始一个全新的问题。当列表视图包含的项目多于可见项目的数量时,有必要从选择位置减去
getFirstVisiblePosition()
。您的列表视图可能只显示3个项目,而它包含10个项目,因此有7个项目不可见。如果随后开始向下滚动,则在调用ListView.getChildAt(3)时会发现异常。
因为它只知道从索引0到2的子视图,而不管滚动位置如何。