gpt4 book ai didi

java - 如何在 ListView 中使用新的自定义 View ?

转载 作者:行者123 更新时间:2023-12-02 05:35:12 25 4
gpt4 key购买 nike

我是 Android 新手,请原谅我的无知~我有几个问题一直无法找到答案。

我创建了一个名为 ImageTapView 的新 View 。这个想法是,当您点击 View 时,会出现一个信息叠加层。这是类(class)(现在只是准系统):

package com.mysite;

public class ImageTapView extends View {
public ImageTapView(Context context, AttributeSet attrs){
super(context, attrs);
init(context);
}
private void init(Context context){

}
public void onClick(){

}
}

到目前为止我已经:

  1. 创建自定义类文件

  2. 创建一个名为 image_tap_view.xml 的布局 xml 文件(我想我可能是错的)

  3. declare-stylable 添加到我的 res/values/attrs.xml

我很困惑。现在,在我的 ListAdapter 中,我正在 getView() 中返回一个 ImageView。所以现在我想返回一个 ImageTapView ,但将 ImageView 传递到我的 ImageTapView 中。所以我的问题是:如何将此ImageView传递给ImageTapView

其次,我对布局文件很困惑。现在在我的 image_tap_view.xml 中我有这个:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<com.mysite.ImageTapView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#333333"
custom:labelPosition="left"
custom:showText="true"
/>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Custom view Test"
/>

</RelativeLayout>
</LinearLayout>

但是在我的自定义 View 布局 xml 中拥有我自己的自定义 View 似乎是错误的。这不会导致无限循环吗?所以我的问题是:在哪里以及如何指定新 ImageTapView 的布局?

提前致谢!

最佳答案

在 xml 中只需保留一个 ImageView ,并且自定义 View 的 init 函数内部会膨胀此 xml 并返回它。

在 getView 中创建自定义 View 的新实例并返回它。

XML:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#333333"
/>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Custom view Test"
/>

</RelativeLayout>
</LinearLayout>

自定义 View :

public class ImageTapView extends LinearLayout{
public ImageTapView(Context context, AttributeSet attrs){
super(context, attrs);
init(context);
}
public ImageTapView(Context context){
super(context);
init(context);
}
private void init(Context context){
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.your_xml, this, true);
}
public void onClick(){

}

}

获取 View :

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageTapView view = (ImageTapView ) convertView;
if (view == null)
view = new ImageTapView (getContext());

return view;
}

关于java - 如何在 ListView 中使用新的自定义 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25052414/

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