Spinner+GridView 监听 求解。。。。

黛曦葛溪 发布于 2012/06/05 14:56
阅读 2K+
收藏 1

怎样给Spinner 一个监听  当选择下拉框类型后  下面的图片 会显示 对应的  图片啊?现在显示的是全部的。我定义的   数据库  图片字段名为   num  。SD卡图片名跟数据图片名一样。我的Adapter 是自定义的  PictureAdapter   。具体怎么写啊。。。?

加载中
0
迷途d书童
迷途d书童

 

//前面有List的话,初始化的时候都要先实例化它的
private List<Map<String,Object>> listmap;

//Adapter实例化的时候给了listmap,后面就不需要再设置了,
//直接picadapter.notifyDataSetChanged();就可以刷新gridview界面
picadapter = new PictureAdapter(MovieActivity.this,listmap,picname);

//新查询到的数据 要转化成List<Map<String,Object>>数据结构给listmap,
//再picadapter.notifyDataSetChanged();
Movie typeResult = (Movie)movieservice.findMovieByType(type);
listmap.clear();
List<Map<String,Object>> newData = typeResult to List<Map<String,Object>>;
listmap.addAll(newData);
picadapter.notifyDataSetChanged();

黛曦葛溪
黛曦葛溪
你帮我看下我下面贴上去的问题吧。。。谢谢了。。
迷途d书童
迷途d书童
回复 @朱洋洋 : 这个当然要你自己写转化过程啊,我只是把意思告诉你。
黛曦葛溪
黛曦葛溪
List<Map<String,Object>> newData = typeResult to List<Map<String,Object>> 这样转换 编译的时候就报错呢?
0
红薯
黛曦葛溪
黛曦葛溪
回复 @鉴客 : 对不起了,我都没在这里面问过也不知道可以这样,还以为别人写上个名字。
鉴客
鉴客
回复 @朱洋洋 : 就你这不虚心的态度,知道也不想回答
黛曦葛溪
黛曦葛溪
回复 @无头苍鹰 : 恩?这样也可以?那怎么没出来回答啊?
铂金苍鹰
铂金苍鹰
回复 @朱洋洋 : 他这是帮你叫专家
黛曦葛溪
黛曦葛溪
什么啊?请不要打酱油好不好?真是。。。
0
迷途d书童
迷途d书童

给Spinner设置项选中事件setOnItemSelectedListener,在该事件里面写查询新数据的逻辑代码,查询到结果后通知Gridview刷新:PictureAdapter.notifyDataSetChanged();

黛曦葛溪
黛曦葛溪
你看一下我下面贴上去的代码吧,代码太多 回复时贴补上去。谢谢了。。。
0
黛曦葛溪
黛曦葛溪
actorSpinner = (Spinner) findViewById(R.id.ActorSpinnerID);
		ArrayAdapter<CharSequence> actorAdapter = ArrayAdapter.createFromResource(this,R.array.Actor ,android.R.layout.simple_spinner_item );
		actorAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		actorSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {

			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {
				actorSpinner.getItemAtPosition(position);
			}
			public void onNothingSelected(AdapterView<?> arg0) {

			}
		});
在这里面写吗?

0
黛曦葛溪
黛曦葛溪
private class SpinnerListener implements OnClickListener{

		@Override
		public void onClick(View v) {

			switch(v.getId()){
			case R.id.TypeSpinnerID:
				Movie typeResult = (Movie) movieservice.findMovieByType(type);
				//picadapter = typeResult.getMovieId();
				picadapter.notifyDataSetChanged();
				gridView.setAdapter(picadapter);
				break;

			case R.id.RegionSpinnerID:
				Movie regionResult = movieservice.findMovieByRegion(regionName);
				gridView.setAdapter(picadapter);
				picadapter.notifyDataSetChanged();
				break;
				default :
					break;
			case R.id.ActorSpinnerID:
				
			}

		}

	}
我在这里面写了个 内部类,用wsitch () case 方法  但是  Movie regionResult = movieservice.findMovieByRegion(regionName);  这个得到数据库结果集 的regionResult  怎样放到条件里面啊?

0
迷途d书童
迷途d书童
actorSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> parent, View view,
	int position, long id) {
	spinnerItemSelected(position);
    }
    public void onNothingSelected(AdapterView<?> arg0) {

    }
});
		
//自定义方法
private void spinnerItemSelected(int position) {
    switch(position){
	case R.id.TypeSpinnerID:
	//不知道这句你的意思 Movie typeResult = (Movie) movieservice.findMovieByType(type);
	//前面给picadapter设置的数据集List或者HashMap,这里把你现在查询到的数据替换掉
	picadapter.notifyDataSetChanged();
	//前面给gridView设置Adapter,这里就不用再设置了
	break;

	case R.id.RegionSpinnerID:
	break;
    }
}

0
黛曦葛溪
黛曦葛溪

引用来自“迷途d书童”的答案

actorSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> parent, View view,
	int position, long id) {
	spinnerItemSelected(position);
    }
    public void onNothingSelected(AdapterView<?> arg0) {

    }
});
		
//自定义方法
private void spinnerItemSelected(int position) {
    switch(position){
	case R.id.TypeSpinnerID:
	//不知道这句你的意思 Movie typeResult = (Movie) movieservice.findMovieByType(type);
	//前面给picadapter设置的数据集List或者HashMap,这里把你现在查询到的数据替换掉
	picadapter.notifyDataSetChanged();
	//前面给gridView设置Adapter,这里就不用再设置了
	break;

	case R.id.RegionSpinnerID:
	break;
    }
}

Movie typeResult = (Movie)movieservice.findMovieByType(type);
//是查询数据库的 因为查询数据库 是 public Movie findMovieByType(type){}所以这里非让也写成Movie 
 的,前面有定义一个private List<Map<String,Object>> listmap;
但是 listmap = movieservice.findMovieByType(type)这样查到的放到 
picadapter = new PictureAdapter(MovieActivity.this,listmap,picname);中报错。。。

0
黛曦葛溪
黛曦葛溪
case R.id.ActorSpinnerID:
			MovieService msActor = new MovieService(this.getBaseContext());
			List<Map<String, Object>> actorResult = msActor.findMovieByActor(actor);
			listmap.clear();
			listmap.addAll(actorResult);
			picadapter.notifyDataSetChanged();
			break;
这样只是从数据库中 得到了  一个图片名字的集合,怎么将这个集合转换成  int 类型 可不可以 指点一下啊?

//因为 我还要根据 得到的 num(图片的编号,这个编号也是SD卡图片的名字) 这样读取到SD卡图片 在GridView 中显示。。。谢谢了:
String path = "mnt/pictures/"+num+".jpg"

//下面这一段是得到  一个类型的 相关图片  num 值的  集合
List<Map<String, Object>> actorResult = msActor.findMovieByActor(actor);

//其实我只是想 用 String path = "mnt/pictures/"+num+".jpg"拿到图片  
//可是想想 我上面用的:
listmap = FileList.findFile(Environment.getExternalStorageDirectory()
                    .getAbsolutePath());  
//也是得到图片  只是全部得到了。。。两个都是路径  有点迷了  
  

skywxx
skywxx
回复 @朱洋洋 : 哦,好的,我试试
黛曦葛溪
黛曦葛溪
回复 @skywxx : 那是我拍的正确路径,那个路径组合到一块就是:data/data/包名/picture/1.jpg 路径可以自己随便定的,我路径是组合出来的,你路径是从数据库中 直接提取出来完整的。。。都一样。。
skywxx
skywxx
回复 @skywxx : 你所说的正确的路径是什么样的,就是你前边提到过的data+numint+".jpg"吗?
黛曦葛溪
黛曦葛溪
回复 @skywxx : 如果获取到了,那只差你在Adapter 里面的了。。看里面路径传递过来没有,然后。。。干脆我把 Adapter 发给你好了
黛曦葛溪
黛曦葛溪
回复 @skywxx : 数据库只要你能读到数据就可以了,这只是你获得数据的,跟显示 图片没关系,你在你读取Activity 的类里面 打印一下,是不是获取到了正确的路径。。。
下一页
0
黛曦葛溪
黛曦葛溪
case R.id.TypeSpinnerID:
	List<Map<String, Object>> typenum = movieservice.findMovieByType(type);
	listmap = FileList.findFile(Environment.getExternalStorageDirectory()+
"/Pictures/"+typenum+".jpg");
	//String path = Environment.getExternalStorageDirectory()+"/Pictures/"+typenum+".jpg";
	Log.v("listmap.size===>", ""+listmap.size());
	listmap.clear();
//感觉这里面不能 addAll(typenum) 因为这只是数据库里面的图片编号并没有把SD卡//中对//应的放进来 
// 而且  listmap 不要的话从SD卡读取到的图片还是要封装成集合放到GridView中的
	listmap.addAll(typenum);
	picadapter.notifyDataSetChanged();
	break;

黛曦葛溪
黛曦葛溪
啊啊啊啊。。。谁能帮帮我。。。不然再做不出来我就惨了啊。。。哥哥姐姐们。。。
0
黛曦葛溪
黛曦葛溪
case R.id.TypeSpinnerID:
			movieservice=new MovieService(getApplicationContext());
			List<Map<String, Object>> typenum = movieservice.findMovieByRegion(movie.getRegion());
//利用迭代将集合遍历出来
			for (Iterator typeiterator = typenum.iterator(); typeiterator.hasNext();) {
				Integer map = (Integer) typeiterator.next();
				listmap = FileList.findFile(Environment.getExternalStorageDirectory()+"/Pictures/"+map+".jpg");
			}
			 Log.v("listmap.size===>", ""+listmap.size());
			listmap.clear();
			listmap.addAll(typenum);
			picadapter.notifyDataSetChanged();
			break;
//这样为什么选了下拉框以后都没有反应?下面也是遍历了集合 也没有效果。。。帮我解决一下吧。。。谢谢了。。。急求指导!!!!
case R.id.RegionSpinnerID:
			MovieService ms = new MovieService(this.getBaseContext());
			List<Map<String, Object>> regionResult= ms.findMovieByRegion(type.getRegion());
			for(Map<String, Object> movies : regionResult){
				listmap = FileList.findFile(Environment.getExternalStorageDirectory()+"/Pictures/"+movies+".jpg");
				}
			listmap.clear();
			listmap.addAll(regionResult);
			picadapter.notifyDataSetChanged();
			break;	

返回顶部
顶部