【问题标题】:Button Click Listener On ListView in a Fragment按钮单击片段中 ListView 上的侦听器
【发布时间】:2015-03-01 19:24:46
【问题描述】:

因此,我尝试使用 onClickListener 为 Button 添加一些功能,但我似乎无法使其正常工作。
我的按钮在列表项的 XML 中声明,我的列表在 Fragment 中实现。
我进行了一些研究以找到一些答案,但我尝试的每个解决方案都失败了,或者太复杂了。我开始为我的无知感到抱歉。

因此,我的问题是在这些条件下我应该如何为我的 Button 获取 onClickListener。有没有什么东西让Listener的效果在列表中不起作用?

【问题讨论】:

  • 请发布您的代码。
  • 发布您的活动和列表项代码。

标签: android listview android-fragments onclicklistener


【解决方案1】:

在您的 adpater 类中通过 id 找到按钮,然后在同一个类中写入 button.setOnClickListner。它会工作

如果你想在你的框架类中点击,你必须在适配器类中编写接口并通过该接口扩展你的片段,然后使用接口方法进行点击

如果您需要在带有索引/位置的片段类中单击,请使用 belo 示例代码

//Inside adpater class
public interface OnEditLocationListener {
        public void onDeleteClick(int position);

    }

    private OnEditLocationListener listener;

    public void setOnEditLocationListener(OnEditLocationListener listener) {
        this.listener = listener;
    }

    //Inside getView method
    holder.imv_delete.setTag(position);
        holder.imv_delete.setOnClickListener(null);
        holder.imv_delete.setOnClickListener(new OnClickListener() {

            @Override
            public void onDeleteClick(View view) {
                if (listener != null) {
                    listener.onDeleteClick(position);
                }
            }
        });



//In Activity
        yourclass extends yourchoice implements adapter.OnEditLocationListener

        //inside onCreate/onCreateview

        adapter.setOnClickListener(getActivity/this);

        //Button click
    @Override
    public void onDeleteClick(int pos) {
        Toast.makeText(getActivity(), "clicked @ " + pos, Toast.LENGTH_SHORT).show();


    }

【讨论】:

  • @abforce 你是对的,所以我更新了我的代码。请检查一下。现在您可以使用当前行索引或其他任何内容,b 在适配器中的 onDeleteClick 方法中传递它
【解决方案2】:

你好)首先你必须创建你的自定义适配器。例如:

public class EatListAdapter extends BaseAdapter {

    private ArrayList<EatTime> eatTimes;
    private Activity activity;

    public EatListAdapter(Activity activity, ArrayList<EatTime> items) {
        this.eatTimes = items;
        this.activity = activity;
    }

    @Override
    public int getCount() {
        return eatTimes.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

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

        View v;
        LayoutInflater inflater = (LayoutInflater) activity.getApplicationContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        v = inflater.inflate(R.layout.list_item, null);

        Button delete = (Button) v.findViewById(R.id.button_delete);
        delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            //your ON CLICK CODE

        });

        return v;
    }
}

比设置适配器

ListView eatingList = (ListView) findViewById(R.id.eatingList);
adapter = new EatListAdapter(this, eatArrayList);
eatingList.setAdapter(adapter);

【讨论】:

  • 这很好用,我终于明白应该如何使用列表了。我能够很容易地实现这一点。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-13
  • 1970-01-01
相关资源
最近更新 更多