4

我有两种布局

  1. main.xml ----- 使用单个 ListView(比如 listview_01)。
  2. row.xml----- 使用 ImageView(比如 imageView_01)和 TextView(比如 textView_01)

我正在使用我拥有的数组数据填充我listview_01row.xml行。
我想对onclick()事件执行操作imageView_01,它的工作。
我已经onClick()在我imageView_01的.getView()CustomlistAdapter

但是谁能告诉我如何在 CustomListAdapter 的行图像的 listview_01 的 onClick() 事件中获取行索引?

这是我的代码

道歉,但我无法上传我的整个活动和适配器代码

一些活动代码

listView_episodesList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        // TODO Auto-generated method stub

        mQuickAction.show(arg1);

    }
});

一些适配器代码

ImageView imageView_EpisodePic = (ImageView) convertView.findViewById(R.id.imageView_episode_pic);
drawableManager.fetchDrawableOnThread(episodeTemp.episodeImage, imageView_EpisodePic);

imageView_EpisodePic.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        Toast.makeText(context, "Click on image", Toast.LENGTH_LONG).show();
    }
});

从我的活动中,我可以访问我单击的 listView 行索引。但从适配器我不能。我只想在点击时获得行索引ListView(main.xml)ImageView (row.xml)

4

5 回答 5

1

您可以尝试mListView.getPositionForView(v);onClick(View v)其中将返回列表视图项的索引。(注意:我不知道适配器,我只是猜测你可以使用它)

于 2012-04-16T13:26:56.863 回答
0

onItemSelectedListeneter()将拥有适配器视图和位置以及 id.. 在哪个位置是您需要的 ( arg1)

于 2012-04-16T13:33:02.080 回答
0

我遇到了同样的问题,很惊讶我无法从自定义适配器类中找到更好的方法来做到这一点。Nikola 的解决方案可以在 Activity 或 Fragment 类中工作,但据我所知,不能在自定义适配器中工作。

我在对象的 ImageView 属性上设置标签时遇到问题,其中第一个索引 [0] 无法正确返回,但设置对象的“名称”属性的标签完美无缺。我将继续寻找更好的方法来做到这一点,但现在这似乎工作正常。

     public View getView(int position, View convertView, ViewGroup parent) {
        View view = null;

        if (convertView == null) {
            LayoutInflater inflator = context.getLayoutInflater();
            view = inflator.inflate(R.layout.row_project, null);

            final ViewHolder viewHolder = new ViewHolder();
            viewHolder.name = (TextView)view.findViewById(R.id.textProjectName);
            viewHolder.desc = (TextView)view.findViewById(R.id.textProjDesc);
            viewHolder.image = (ImageView)view.findViewById(R.id.imgProj);           
            viewHolder.name.setTag(position);

            Log.d(TAG, "Position: " + position);


            viewHolder.image.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Log.d(TAG, "Image Selected at Index: " + viewHolder.name.getTag());
                }

            });

            view.setTag(viewHolder);
        }
        else {
            view = convertView;
            ((ViewHolder) view.getTag()).name.setTag(list.get(position));
        }

        ViewHolder holder = (ViewHolder) view.getTag();
        holder.name.setText(list.get(position).getName());
        holder.desc.setText(list.get(position).getDescription());

        return view;
    }
} 
于 2014-02-19T02:02:19.087 回答
0

列表中项目的行 ID 被设置为“convertView”的 ID。

convertView.setId(位置)

当按下/选择一个项目时,会在 OnClickListener 中获取该项目的行 ID。

      convertView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // item position is fetched here. this is exactly the same position of the selected item in your list
                int selectedPosition = v.getId();
            }
        });

您可以为 convertView 的任何子级设置 id。例如,

convertView.imageView.setId(位置);

然后获取id如下,

    imageView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            int selectedPosition = v.getId();
        }
    });

全功能

public View getView(int position, View convertView, ViewGroup vg) {

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.row_book_item, null);
        viewHolder = new ViewHolder();

        // ...

        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }

    if (listItems.size() > 0) {
        // item position is set here. this is exactly the same position of your item in the list
        convertView.setId(position);
        convertView.imageView.setId(position);

        // ...

        convertView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // item position is fetched here. this is exactly the same position of the selected item in your list
                int selectedPosition = v.getId();
            }
        });

        imageView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // item position is fetched here. this is exactly the same position of the selected item in your list
                int selectedPosition = v.getId();
            }
        });


    }
    return convertView;
}
于 2017-02-07T12:31:58.727 回答
-1

在我的自定义适配器中,我有:

public View getView(final int position, View convertView, ViewGroup parent) {

其中位置是单击的行的索引。这应该可以在您的onClick()方法中访问。

于 2014-06-12T18:48:02.130 回答