使用 onListItemClick() 时更改 ListView 行 xml 布局资源
change ListView row xml layout resource when onListItemClick() is used
我有这个自定义布局,row.xml 在我的 ListView
行中:
<?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="40dp"
android:orientation="horizontal"
android:weightSum="10">
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="9"
android:id="@+id/rowTextView"
android:typeface="serif"
android:gravity="center_vertical"
android:textSize="15sp"
android:layout_marginLeft="5dp" />
<ImageView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/swipeImageView"
android:src="@mipmap/swipe"
android:alpha="0.5"
android:padding="11dp" />
</LinearLayout>
现在我想更改 row.xml 此布局 clicked_row.xml 使用 onListItemClick()
:
<?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="40dp"
android:orientation="horizontal"
android:weightSum="10">
<EditText
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="9"
android:id="@+id/rowTextView"
android:typeface="serif"
android:gravity="center_vertical"
android:textSize="15sp"
android:layout_marginLeft="5dp" />
<ImageView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/saveImageView"
android:src="@mipmap/trash"
android:alpha="0.5"
android:padding="11dp" />
</LinearLayout>
我正在尝试使用 this answer;但他们似乎在操纵布局内视图的可见性,而不是用一种布局替换另一种布局。我不确定我应该用什么来替换 row.xml for clicked_row.xml:
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
//Code for replacing row.xml with clicked_row.xml
}
感谢您的帮助!
您可以将 TextView 和 ImageView 添加到同一布局。您可以隐藏一个在 onListItemClick
上的可见性
但这会在您滚动列表时导致问题,因为 Android 重用了列表项视图。因此,不要直接访问 ListItemView,而是在模型 class 中添加一个 属性,例如 selected.
在Adapater.getView()hide/show视图元素中根据选择字段值
此 post 将帮助您了解 Android ListView 的工作原理:
How ListView's recycling mechanism works
我认为更好的方法是合并 2 个文件:
<?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="40dp"
android:orientation="horizontal"
android:weightSum="10">
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="9"
android:id="@+id/rowTextView"
android:typeface="serif"
android:gravity="center_vertical"
android:textSize="15sp"
android:layout_marginLeft="5dp" />
<EditText
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="9"
android:id="@+id/rowEditText"
android:typeface="serif"
android:gravity="center_vertical"
android:textSize="15sp"
android:layout_marginLeft="5dp"
android:visibility="gone"/>
<ImageView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/swipeImageView"
android:src="@mipmap/swipe"
android:alpha="0.5"
android:padding="11dp" />
</LinearLayout>
然后:
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
((ViewGroup)v).findViewById(R.id.rowTextView).setVisibility(View.GONE);
((ViewGroup)v).findViewById(R.id.rowEditText).setVisibility(View.VISIBLE);
ImageView imageView = (ImageView)((ViewGroup)v).findViewById(R.id.swipeImageView);
imageView.setImageDrawable(imageView.getContext().getResources().getDrawable(R.mipmap.trash));
//Code for replacing row.xml with clicked_row.xml
}
我有这个自定义布局,row.xml 在我的 ListView
行中:
<?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="40dp"
android:orientation="horizontal"
android:weightSum="10">
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="9"
android:id="@+id/rowTextView"
android:typeface="serif"
android:gravity="center_vertical"
android:textSize="15sp"
android:layout_marginLeft="5dp" />
<ImageView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/swipeImageView"
android:src="@mipmap/swipe"
android:alpha="0.5"
android:padding="11dp" />
</LinearLayout>
现在我想更改 row.xml 此布局 clicked_row.xml 使用 onListItemClick()
:
<?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="40dp"
android:orientation="horizontal"
android:weightSum="10">
<EditText
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="9"
android:id="@+id/rowTextView"
android:typeface="serif"
android:gravity="center_vertical"
android:textSize="15sp"
android:layout_marginLeft="5dp" />
<ImageView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/saveImageView"
android:src="@mipmap/trash"
android:alpha="0.5"
android:padding="11dp" />
</LinearLayout>
我正在尝试使用 this answer;但他们似乎在操纵布局内视图的可见性,而不是用一种布局替换另一种布局。我不确定我应该用什么来替换 row.xml for clicked_row.xml:
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
//Code for replacing row.xml with clicked_row.xml
}
感谢您的帮助!
您可以将 TextView 和 ImageView 添加到同一布局。您可以隐藏一个在 onListItemClick
上的可见性但这会在您滚动列表时导致问题,因为 Android 重用了列表项视图。因此,不要直接访问 ListItemView,而是在模型 class 中添加一个 属性,例如 selected.
在Adapater.getView()hide/show视图元素中根据选择字段值
此 post 将帮助您了解 Android ListView 的工作原理: How ListView's recycling mechanism works
我认为更好的方法是合并 2 个文件:
<?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="40dp"
android:orientation="horizontal"
android:weightSum="10">
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="9"
android:id="@+id/rowTextView"
android:typeface="serif"
android:gravity="center_vertical"
android:textSize="15sp"
android:layout_marginLeft="5dp" />
<EditText
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="9"
android:id="@+id/rowEditText"
android:typeface="serif"
android:gravity="center_vertical"
android:textSize="15sp"
android:layout_marginLeft="5dp"
android:visibility="gone"/>
<ImageView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/swipeImageView"
android:src="@mipmap/swipe"
android:alpha="0.5"
android:padding="11dp" />
</LinearLayout>
然后:
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
((ViewGroup)v).findViewById(R.id.rowTextView).setVisibility(View.GONE);
((ViewGroup)v).findViewById(R.id.rowEditText).setVisibility(View.VISIBLE);
ImageView imageView = (ImageView)((ViewGroup)v).findViewById(R.id.swipeImageView);
imageView.setImageDrawable(imageView.getContext().getResources().getDrawable(R.mipmap.trash));
//Code for replacing row.xml with clicked_row.xml
}