android - 如何在 ListView 项目的 View 上添加不同的 OnClickListeners 以执行不同的操作

标签 android listview onclick

有没有可能检查里面的 View ListView项目被点击了吗?
也就是说,当你点击ListView里面的不同View的时候项目应用程序应该执行不同的操作。
详细来说,我有一个简单的 Book.java包含一些书籍描述的类。
然后我创建 ListView<Book>使用 BooksAdapter.class :

public class BooksAdapter extends ArrayAdapter<Book> {
    public BooksAdapter (Context context, List<Book> books) {
        super(context,0,books);
    }
    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {

//        ConstraintLayout constraintLayout = new ConstraintLayout();
//        constraintLayout.setVisibility();
        View listItemView = convertView;
        if (listItemView == null) {
            listItemView = LayoutInflater.from(getContext()).inflate(
                    R.layout.books_list_item, parent, false);
        }
        Book currentBook = getItem(position);
        ImageView coverView = (ImageView) listItemView.findViewById(R.id.preview_image_view);
        if (currentBook.getImage() == "No cover") {
            coverView.setImageResource(R.drawable.no_book_cover);
        } else {
            Picasso.get().load(currentBook.getImage()).into(coverView);
        }
        TextView authorTextView = (TextView)listItemView.findViewById(R.id.autor_text);
        authorTextView.setText(formatAuthor(currentBook.getAuthor(),currentBook.getDate()));
        TextView titleTextView = (TextView)listItemView.findViewById(R.id.title_text);
        titleTextView.setText(currentBook.getTitle());
        //TextView descrTextView = (TextView)listItemView.findViewById(R.id.description_text);
        //descrTextView.setText(currentBook.getDescription());
        return listItemView;
    }

    private String formatAuthor (String name,String date ) {
        name = name.substring(2,name.length()-2);
        date = date.substring(0,4);
        String fullString = name + ", " + date;
        return(fullString);
    }
}  

books_list_item.xml :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/list_item"
        android:layout_width="match_parent"
        android:layout_height="120dp"
        android:orientation="horizontal"
        android:paddingEnd="16dp"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"
        android:paddingStart="16dp"
        android:paddingBottom="16dp"
        android:paddingTop="8dp">
        <ImageView
            android:id="@+id/preview_image_view"
            android:layout_width="80dp"
            android:layout_height="match_parent" />
        <LinearLayout
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <TextView
                android:id="@+id/autor_text"
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:maxLines="1"
                android:paddingLeft="8dp"
                android:paddingRight="8dp"
                android:paddingTop="8dp"
                android:textColor="@color/textColorPrimary"
                android:textSize="16sp" />
            <TextView
                android:id="@+id/title_text"
                android:layout_width="match_parent"
                android:layout_height="80dp"
                android:layout_gravity="center_vertical"
                android:maxLines="2"
                android:paddingLeft="8dp"
                android:paddingRight="8dp"
                android:paddingTop="0dp"
                android:textColor="@color/textColorLight"
                android:textSize="16sp" />
        </LinearLayout>
        <ImageView
            android:layout_width="40dp"
            android:layout_height="match_parent"
            android:src="@drawable/ic_info_black_24dp"
            android:scaleType="center"/>
    </LinearLayout>
    <View
        android:layout_width="match_parent"
        android:layout_height="0.5dp"
        android:background="@android:color/darker_gray"/>
</LinearLayout>

MainActivity.java创建 mAdapter 并覆盖 setOnItemClickListener :

   ListView booksListView = (ListView) findViewById(R.id.list);
    mAdapter = new BooksAdapter(this, new ArrayList<Book>());
    booksListView.setAdapter(mAdapter);

    booksListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
            Book book = mAdapter.getItem(position);

            ad = new AlertDialog.Builder(BooksListActivity.this);
            ad.setTitle("Book description");
            ad.setMessage(book.getDescription());

            AlertDialog alert = ad.create();
            alert.show();
            //ad.create();
        }
    }); 

这里有一些我们可以设置的一般问题 onClickListeners在不同的Views在 Item 中(例如 @+id/autor_text@+id/title_text)并在这些情况下执行不同的操作?
我正在阅读有关这几个地方的信息,但没有找到任何有用的东西。感谢您的帮助。

最佳答案

在您的 getView() 方法中,将 onClickListener 设置为所有不同的 Views 并执行相应的操作。

通过执行这段代码:-

authorTextView.setOnClickListener(this);
titleTextView.setOnClickListener(this);  

public void onClick(View v) {

      switch(v.getId()){  
           case R.id.authorTextView:  
                //code to be written to handle the click event
           break;

           case R.id.titleTextView: 
                //code to be written to handle the click event 
           break;
      }
    }
};

关于android - 如何在 ListView 项目的 View 上添加不同的 OnClickListeners 以执行不同的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51807393/

相关文章:

android - 使用适用于 Android v3 的 Google Analytics SDK

android - 从另一个 Android 应用添加 Skype 联系人

android - 如何从android中的listview中删除一个项目

javascript - onclick 下拉菜单回退到悬停,处理多个菜单项

javascript - 如何防止最后一里的点击事件触发?

android - 在带有边框的 textView 中创建自定义 UI 组件按钮

java - 想要执行某些操作以在 ListView 中单击的项目中查看

c# - 在 ListView 的下拉列表中获取 selectedIndexChanged 上的 ListView 项的值

javascript - BJQS slider 点击暂停

android - 使用 AsyncTask 委托(delegate)