【问题标题】:How to interact with buttons present in list view如何与列表视图中的按钮交互
【发布时间】:2011-07-06 12:06:50
【问题描述】:

我创建了一个customListview,我在其中插入了一个按钮..现在单击该button 我想开始新的activity..如何完成创建custom listview 的代码给出下面..谁能告诉我我如何与那个按钮交互来开始一个新的activity..

代码:

public static class ViewHolder
{
    Button butAddNew;
    TextView txtViewHeading;
    TextView  txtViewTitle;
    TextView  txtViewDescription;

}
public View getView(int position, View convertView, ViewGroup parent) 
{
    ViewHolder holder;

    if(convertView==null)
    {
        holder = new ViewHolder();
        convertView = inflater.inflate(R.layout.histryfrm_listview, null);
        holder.butAddNew =(Button) convertView.findViewById(R.id.butAddNew);
        holder.txtViewTitle =(TextView) convertView.findViewById(R.id.txtViewTitle);
        holder.txtViewDescription =(TextView) convertView.findViewById(R.id.txtViewDescription);
        holder.txtViewHeading =(TextView) convertView.findViewById(R.id.txtViewHeading);

        convertView.setTag(holder);
    }
    else
        holder=(ViewHolder)convertView.getTag();

    holder.txtViewTitle.setText(title[position]);
    holder.txtViewDescription.setText(description[position]);
    holder.txtViewHeading.setText(heading[position]);
    return convertView;
} 
}

【问题讨论】:

  • 请发布您的 histryfrm_listview.xml.. 这就是我要问的..
  • 在您的问题底部,您可以选择编辑、重新标记等,点击编辑并粘贴您的代码,..

标签: android listview button onclick


【解决方案1】:

当您创建它时,您始终可以将 onClickListener 从您的 Activity 发送到您的适配器。

否则,在您的适配器中设置一个侦听器,或者在项目的 xml 中使用 onClick。

当我做类似的事情时,我将我的活动 onclicklistener 传递给我的适配器。

编辑: 示例:

http://androidforbeginners.blogspot.com/2010/03/clicking-buttons-in-listview-row.html

或者更好:

Android: ListView elements with multiple clickable buttons

这完全取决于您将如何做。 但是另一个答案可能会起作用,只需传递正确的上下文即可。

【讨论】:

  • 如何做到这一点,请您举例说明一下。
  • 添加了两个示例链接。
【解决方案2】:

你需要做这样的事情..

public static class ViewHolder
    {
        Button butAddNew;
        TextView txtViewHeading;
        TextView  txtViewTitle;
        TextView  txtViewDescription;

    }
public View getView(int position, View convertView, ViewGroup parent) 
{
    ViewHolder holder;

    if(convertView==null)
    {
        holder = new ViewHolder();
        convertView = inflater.inflate(R.layout.histryfrm_listview, null);
        holder.butAddNew =(Button) convertView.findViewById(R.id.butAddNew);
        holder.txtViewTitle =(TextView) convertView.findViewById(R.id.txtViewTitle);
        holder.txtViewDescription =(TextView) convertView.findViewById(R.id.txtViewDescription);
        holder.txtViewHeading =(TextView) convertView.findViewById(R.id.txtViewHeading);

        convertView.setTag(holder);
    }
    else
        holder=(ViewHolder)convertView.getTag();

    holder.txtViewTitle.setText(title[position]);
    holder.txtViewDescription.setText(description[position]);
    holder.txtViewHeading.setText(heading[position]);
    return convertView;
} 

    @Override
        protected void onListItemClick(ListView listView, View view, int position, long id) {
            super.onListItemClick(listView, view, position, id);
            LinearLayout l = (LinearLayout) listView.getChildAt(position);
                    //your code
                    //even this works fine if u don't have too many buttons
                      //u can call your activity here

}

【讨论】:

  • IS按钮文本表示按钮ID
  • 拜托我无法得到它,我会将整个代码发送给您,您检查它在我必须使用它的地方..等等
【解决方案3】:

在getView中设置holder.butAddNew.setOnClickListener很简单

holder.butAddNew.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Intent code for Start Activity
            }
        });

创建自定义适配器类的构造函数并在该构造函数中传递活动或上下文并将其用于启动活动。

更新

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

{
    ViewHolder holder;

if(convertView==null)
{
    holder = new ViewHolder();
    convertView = inflater.inflate(R.layout.histryfrm_listview, null);
    holder.butAddNew =(Button) convertView.findViewById(R.id.butAddNew);
    holder.txtViewTitle =(TextView) convertView.findViewById(R.id.txtViewTitle);
    holder.txtViewDescription =(TextView) convertView.findViewById(R.id.txtViewDescription);
    holder.txtViewHeading =(TextView) convertView.findViewById(R.id.txtViewHeading);

    convertView.setTag(holder);
}
else
    holder=(ViewHolder)convertView.getTag();

holder.txtViewTitle.setText(title[position]);
holder.txtViewDescription.setText(description[position]);
holder.txtViewHeading.setText(heading[position]);
holder.butAddNew.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(Context, activity.class));
            }
        });

return convertView;
} 

【讨论】:

  • 但是在里面我怎么能调用另一个活动..这就是我想要的。
  • 我已经在我的代码中更新了它,但它在 startActivity 中显示错误..我刚刚向您发送了更新后的代码..
  • 首先检查您是否在清单中添加了新活动,第二件事是在意图中传递适当的上下文,例如 getBaseContext() 或 getApplicationContext();
  • 那么上下文呢?你传递了正确的上下文吗?
猜你喜欢
  • 2011-08-19
  • 2021-06-24
  • 1970-01-01
  • 2022-10-18
  • 1970-01-01
  • 2018-11-22
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多