Android按钮单击弹出Listview并传递值(安卓学习笔记)

从网上翻了好多东西,最后总算做出了符合自己需求的。

我的要求是:要显示的列表框的内容由主界面传入,而选择了某个项之后,将选择的序号传回去。

菜鸟,刚开始学习安卓开发。记录下来这些过程。以备以后查看。

setp 1

首先明确多个activity之间怎么传递信息,这里只介绍我刚了解的这两种:

1传递简单数据,直接putExtras(“key”,”value”),在需求中,“将选择的序号传回去”就可以用这个。

2通过bundle来传递。bundle可以直接保存StringArraylist等较为简单的arrayliat。需求中的第一项可以满足。

 

再来看实现:

主界面extends Activity之后在重载的onCreate方法里,这样写:

        exampl = (Button) findViewById(R.id.button1);
        exampl.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent=new Intent(MainActivity.this,StationsList.class);
                Bundle bundle=new Bundle();
                bundle.putStringArrayList("list", busStations);
                intent.putExtras(bundle);
                MainActivity.this.startActivityForResult(intent, 1);
            }

        
        });
        

这里的exampl是一个button,给它加了一个监听事件,就是传递数据并切换activity。

MainActivity.this.startActivityForResult(intent, 1);这一句是指启动一个activity并获取它结束时返回的值,当然值是包含在intent里。

如果仅仅是启动而不需要返回值的话,直接startActivity(intent)就行。

setp 2:

随着程序转到列表示图

列表的activity直接extens listActivity即可,在oncreate中

Bundle receiveBundle=this.getIntent().getExtras();//获取用的bundle
ArrayList<String> strs=receiveBundle.getStringArrayList("list");//通过之前设置的映射中的key来获取结果
ArrayAdapter<String> ada=new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,strs);//直接调用安卓自带的简单的list(android.R.layout.simple_expandable_list_item_1),后面那个strs则是传入参数,表示要展示哪些列表项
setListAdapter(ada);

step3 :

对列表添加监听事件,当选择某一项以后,返回选择哪一项,并关闭当前的activity。直接重载

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    // TODO Auto-generated method stub
    super.onListItemClick(l, v, position, id);

    Intent send=new Intent();
    //将结果返回去,利用简单的信息传递即可
    send.putExtra("theIdSelected",""+id);
    //记得要设置这个,返回一个结果值。如果有多个activity时,这个东西可以用来和request code组合,作为多种情况的分析。   
    StationsList.this.setResult(1, send);
    //结束当前activity
    StationsList.this.finish();
}

setp4:

返回主界面了,对传过来的数据接收下吧:

直接重写方法

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    //在控制台输出传过来的那个id,id的含义是你在列表里选择了哪一个
    System.out.println(resultCode+data.getStringExtra("theIdselected"));
    //这个就是result code,上面有说明。这里的text是一个textview,用来显示用的,测试时可以直接用System.out.println控制台输出也可
    text.setText(""+resultCode);
    text.append(data.getStringExtra("theIdSelected"));
}

 至此,一个简单的按钮弹出Listview并传递值,在activity之间切换已经完成了。

小菜鸟我还遇到的问题有:

1.写了activity之后没有在AndroidManifest.xml文件中声明

2.传递的时候,用到bundle以后,intent用的是 intent.putExtras(bundle);不是putExtra

3.给按钮添加监听的时候,导入了错误的包,应该是import android.view.View.OnClickListener;

结果是导入了dialog那个包,一直提示我应该重写方法。。。

 

Reference:

http://blog.csdn.net/yf210yf/article/details/6856962

http://blog.csdn.net/xiazdong/article/details/7749261

http://jackxlee.blog.51cto.com/2493058/684428

以及度娘和谷歌的大力支持

 

文章版权归 FindHao 所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明作者 FindHao 和本文原始地址:
https://www.findhao.net/easycoding/557

你可能喜欢:(相似内容推荐和广告都使用了谷歌的推荐系统,需要对本站取消广告屏蔽才能显示。感谢点击↓广告支持博主~)

Find

新浪微博(FindSpace博客)QQ群:不安分的Coder(375670127) 不安分的Coder

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*