【问题标题】:RelativeLayout onClick attribute not workingRelativeLayout onClick 属性不起作用
【发布时间】:2014-09-19 22:44:42
【问题描述】:

我通过自定义适配器 SongsListAdapter.java 和自定义 itemview music_item.xml 在 ListView 中显示一个列表,并且我想在我的活动类 MainActivity.java 中调用一个方法,所以我不能使用 setOnClickListener 方法
我所做的是向music_item.xmlonClick添加了一个属性,以调用MainActivity.java中的方法
但这不起作用,通过单击列表项,它不会从 Activity 类调用方法

SongsListAdapter.java

public View getView(final int position, View view, ViewGroup parent) {
    final ViewHolder holder;
    if (view == null) {
        holder = new ViewHolder();
        view = inflater.inflate(R.layout.music_item, null);
        this.mView = view;
        holder.title = (TextView) view.findViewById(R.id.songName);
        holder.descr = (TextView) view.findViewById(R.id.songArtists);
        holder.dp = (ImageView) view.findViewById(R.id.albumIcon);
        view.setTag(holder);
    } else {
        holder = (ViewHolder) view.getTag();
    }
    // Set the results into TextViews
    holder.title.setText(SongsListItemslist.get(position).getDisplayName());
    holder.descr.setText(SongsListItemslist.get(position).getArtist());
    holder.dp.setImageBitmap(SongsListItemslist.get(position).getBitmap());
    // Listen for ListView Item Click
    view.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
        }
    });
    return view;
}

MainActivity.java

public void songPicked(View view) {
    Log.v("clicked", "clicked");
    musicSrv.setSong(Integer.parseInt(view.getTag().toString()));
    musicSrv.playSong();
}

Music_item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/card"
android:clickable="true"
android:onClick="songPicked" >

<ImageView
    android:id="@+id/albumIcon"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:src="@drawable/abc_ab_bottom_solid_dark_holo" />
</RelativeLayout>

我无法在我的日志中看到clicked..

【问题讨论】:

    标签: java android xml onclick


    【解决方案1】:

    从您的 SongsListAdapter.java

    中删除它
       view.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View arg0) {
            }
        });
    

    您在适配器中设置了一个带有空操作的 onClick 侦听器,这是不必要的,请仅使用您的布局中定义的方法:

    android:onClick="songPicked" 
    

    【讨论】:

      【解决方案2】:

      您不想在列表项 Music_item 的布局上设置监听器。这将包含在 ListView 的 setOnItemClickListener 下。

      见:setOnItemClickListener on custom ListView

      【讨论】:

        【解决方案3】:

        首先你必须删除

        view.setOnClickListener(new OnClickListener() {
        
           @Override
               public void onClick(View arg0) {
           }
        });
        

        如果你不想处理 ListView 上的点击,你需要从 MainActivity 调用它

            list.setAdapter(yourCustomAdapter);
            list.setOnItemClickListener(new OnItemClickListener() {
        
                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
        
                    Log.v("clicked", "clicked");
                    musicSrv.setSong(Integer.parseInt(view.getTag().toString()));
                    musicSrv.playSong();
        
                }
            });
        

        不要忘记从 RelativLayout 中删除 onClick 属性。

        祝你好运..

        【讨论】:

        • 这是个好主意 没想到以后会用到自定义适配器
        【解决方案4】:

        你说你不能使用 setOnClickListener,我不知道为什么?在您的适配器构造函数中,您可以传入 Activity,将其设置为适配器类中的变量,并在您的点击监听器中使用它来调用 Activity 中定义的方法。

        或者,在您的活动或片段(即您最初设置适配器的位置)中使用 setOnItemClickListener。

        【讨论】:

        • 我不想增加依赖
        猜你喜欢
        • 2012-10-18
        • 1970-01-01
        • 2021-07-27
        • 1970-01-01
        • 2020-11-12
        • 1970-01-01
        • 2023-04-08
        • 2017-03-09
        • 2012-06-09
        相关资源
        最近更新 更多