【问题标题】:how to use intent and bundles for custom list view如何为自定义列表视图使用意图和捆绑包
【发布时间】:2016-08-24 12:32:01
【问题描述】:

我是 android 应用程序开发的新手。我正在尝试为自定义列表视图中的按钮单击创建新活动。(即)我想为列表视图项中使用的按钮添加 Click 事件。如何为列表项中的按钮提供 Click 事件。我正在尝试使用意图和捆绑来为两个不同的活动传递数据。但是如果我使用意图,那么它对我来说无法正常工作..任何人请帮我解决这个问题..

【问题讨论】:

标签: java android listview


【解决方案1】:

由于您没有发布任何代码,我会尽力根据您的问题给出答案。您希望在 ListView 项目中的按钮单击事件。只需使用findViewById()ListViewgetView() 方法内的按钮获取ID,然后在该按钮上添加onClickListener。在此 onClick 事件中启动新活动。

编辑: 根据您的 cmets 更改线路:

intent.putExtra("data",tvmername.getText().toString());
                startActivity(intent);

对此:

intent.putExtra("data",holder.tvmername.getText().toString());
                startActivity(intent);

ArrayAdapter 的代码:

public class MovieAdapter extends ArrayAdapter {
    private List<CarrotModel> carrotModelList;
    private int resource;

    private LayoutInflater inflater;

    public MovieAdapter(Context context, int resource, List<CarrotModel> objects) {
        super(context, resource, objects);
        carrotModelList = objects;
        this.resource = resource;
        inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
    }

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

        ViewHolder holder=null;
        if (convertView == null) {
            holder=new ViewHolder();
            convertView = inflater.inflate(resource, null);

            holder.ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon);

            holder.tvDiscount = (TextView) convertView.findViewById(R.id.tvDiscount);
           holder.tvmername = (TextView) convertView.findViewById(R.id.tvMerName);
            holder.tvDealDesc = (TextView) convertView.findViewById(R.id.tvDealDesc);
            holder.tvOfftoDis = (TextView) convertView.findViewById(R.id.tvOftoDis);
            holder.tvmeradd = (TextView) convertView.findViewById(R.id.tvmeradd);
            convertView.setTag(holder);
        }
        else {

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


        final ProgressBar progressBar;


        progressBar=(ProgressBar) convertView.findViewById(R.id.progressBar);


        ImageLoader.getInstance().displayImage(carrotModelList.get(position).getImageURL(), holder.ivIcon, new ImageLoadingListener() {
            @Override
            public void onLoadingStarted(String imageUri, View view) {
                progressBar.setVisibility(View.VISIBLE);
            }

            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {

                progressBar.setVisibility(View.GONE);
            }

            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                progressBar.setVisibility(View.GONE);
            }

            @Override
            public void onLoadingCancelled(String imageUri, View view) {
                progressBar.setVisibility(View.GONE);
            }
        });
        holder.tvDiscount.setText(carrotModelList.get(position).getDiscount() + "% OFF");
        holder.tvmername.setText(carrotModelList.get(position).getMerchantName());
        holder.tvDealDesc.setText(carrotModelList.get(position).getDealDescription());
        holder.tvOfftoDis.setText(carrotModelList.get(position).getOffersToDisplay());
        holder.tvmeradd.setText(carrotModelList.get(position).getMerchantAddress());

        Button Button1= (Button)  convertView.findViewById(R.id.button);

        Button1.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Intent intent=new Intent(getApplicationContext(), SecondActivity.class);
                intent.putExtra("data",holder.tvmername.getText().toString());
                startActivity(intent);
            }

        });


        return convertView;
    }

    class ViewHolder{
       private ImageView ivIcon;
        private TextView tvDiscount;
        private   TextView tvmername;
        private TextView tvDealDesc;
        private TextView tvOfftoDis;
        private  TextView tvmeradd;

    }


}

【讨论】:

  • 我尝试了这种方法,但它仍然对我不起作用.. 这是代码:jsfiddle.net/mawy0tLa
  • 这段代码运行是否正常,或者你是否遇到任何错误(除了那个按钮点击)?
  • 代码运行正常..点击按钮时显示错误
  • 08-24 19:03:12.466 3833-3833/com.carrotmonk.myapplication E/AndroidRuntime: 致命异常: 主进程: com.carrotmonk.myapplication, PID: 3833 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.CharSequence android.widget.TextView.getText()”
  • 我认为您在 SecondActivity.java 类中遇到此错误,必须有一些“TextView”在那里您设置作为意图传递的数据。检查“TextView”是否已正确初始化/或者您可能没有正确获取 id。让我知道您的问题是否已解决
【解决方案2】:

只需进行以下更改。

  Button1.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    Intent intent=new Intent(getApplicationContext(), SecondActivity.class);
                    intent.putExtra("data",holder.tvmername.getText().toString());
                    startActivity(intent);
                }

            });

如果您仍然收到 NullPointerException 则发送资源文件。

【讨论】:

  • 如果是文本意味着我可以像这样使用..intent.putExtra("data",holder.tvmername.getText().toString());如果我想传递 ImageView 而不是文本,那么我必须使用什么
猜你喜欢
  • 2015-12-03
  • 2020-06-11
  • 1970-01-01
  • 2017-03-11
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多