求助!一简单的listView加载问题

win-sun 2014-06-16 11:07:36
package com.xyyj.sharefeelingsapp.page;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.xyyj.sharefeelingsapp.R;

import android.annotation.SuppressLint;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.SimpleAdapter;

@SuppressLint({ "ValidFragment", "NewApi" })
public class RecordMood extends Fragment {
private View view;
private ListView recordlist;
private Map<String,Object> picUrlMap;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.recordmood,null);
recordlist = (ListView) view.findViewById(R.id.recordlist);
initList();
return view;
}

public void initList() {
List<Map<String,Object>> data = new ArrayList<Map<String,Object>>();
picUrlMap = new HashMap<String,Object>();
picUrlMap.put("pic",R.drawable.pic1);
picUrlMap.put("text", "测试一");
data.add(picUrlMap);

/* picUrlMap = new HashMap<String,Object>();
picUrlMap.put("pic",R.drawable.pic2);
picUrlMap.put("text", "测试一");
data.add(picUrlMap);

picUrlMap = new HashMap<String,Object>();
picUrlMap.put("pic",R.drawable.pic3);
picUrlMap.put("text", "测试一");
data.add(picUrlMap);
*/
SimpleAdapter adapter = new SimpleAdapter(getActivity().getApplicationContext(), data,
R.layout.recordlist_item, new String[]{"pic","text"}, new int[]{R.id.gif,R.id.text});
recordlist.setAdapter(adapter);
adapter.notifyDataSetChanged();
}

}

recordlist_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="80dp" >

<com.ant.liao.GifView
android:id="@+id/gif"
android:layout_width="wrap_content"
android:layout_height="80dp"
android:enabled="false"
android:onClick="recordClick"
android:src="@drawable/pic1" />
<!--
<ImageView
android:id="@+id/img1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/logo_qzone" /> -->

<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="80dp"
android:layout_alignBottom="@+id/gif"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/gif"
android:text="测试" />

</RelativeLayout>

</LinearLayout>

就是不显示,不知道那里出错了?
...全文
190 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
win-sun 2014-06-17
  • 打赏
  • 举报
回复
,分已送上,优化什么的,这个做的很少,所以不是很懂这个,也许以后用多了就好多了。
ipip2005 2014-06-16
  • 打赏
  • 举报
回复
引用 7 楼 u010663321 的回复:
[quote=引用 5 楼 ipip2005 的回复:] 我没有在Activity中找到何时会使用RecordMood中的方法啊
convertView.setTag(gifView);这是干什么的?[/quote] 把得到的view设为convertView的一个附属物,不用每次都调用findViewById,优化listView用的
win-sun 2014-06-16
  • 打赏
  • 举报
回复
由于修改的内容很多,问题也很多,所以直接放上这个简单的项目。下载地址 http://download.csdn.net/detail/u010663321/7506607
win-sun 2014-06-16
  • 打赏
  • 举报
回复
引用 5 楼 ipip2005 的回复:
我没有在Activity中找到何时会使用RecordMood中的方法啊
convertView.setTag(gifView);这是干什么的?
win-sun 2014-06-16
  • 打赏
  • 举报
回复
嗯,。我的代码有问题,我正在重构。我想用的是ViewPager加fragment。现在代码很混乱,就不贴了,等解决了,在贴出解决的代码。
ipip2005 2014-06-16
  • 打赏
  • 举报
回复
我没有在Activity中找到何时会使用RecordMood中的方法啊
win-sun 2014-06-16
  • 打赏
  • 举报
回复
谢了,不过打断点发现RecordMood (贴出来的第一段代码)方法都进不去,
我的Activity如下。都不知道怎么改了。。。。。
package com.xyyj.sharefeelingsapp.main;

import java.util.ArrayList;

import com.ant.liao.GifView;
import com.xyyj.sharefeelingsapp.R;
import com.xyyj.sharefeelingsapp.main.util.ActivityManage;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;

@SuppressLint("NewApi")
public class MainActivity extends Activity implements OnClickListener {
private View view1,view2,view3;//需要滑动的页卡
private ArrayList<View> viewList ;//页面集合
private ViewPager viewPager;//页卡容器
private ImageView imageView;// 动画图片
private int offset = 0;// 动画图片偏移量
private int currIndex = 0;// 当前页卡编号
private int bmpW;// 动画图片宽度
private GifView gf1;
private int count=0;
private ImageView image1;

@Override
public void onClick(DialogInterface dialog, int which) {

}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 去除标题栏
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
// 取消状态栏,充满全屏
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);

/**
* 添加到容器管理,统一销毁机制
*/
ActivityManage.getInstance().addActivity(this);

/**
* 初始化加载
*/
initImageView();
initViewPager();
}

public void initImageView() {
imageView= (ImageView) findViewById(R.id.cursor);
bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.a).getWidth();// 获取图片宽度
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int screenW = dm.widthPixels;// 获取分辨率宽度
offset = (screenW / 3 - bmpW) / 2;// 计算偏移量
Matrix matrix = new Matrix();
matrix.postTranslate(offset, 0);
imageView.setImageMatrix(matrix);// 设置动画初始位置
}

public void initViewPager() {

view1 = findViewById(R.layout.recordmood);
view2 = findViewById(R.layout.sharemood);
view3 = findViewById(R.layout.countchart);

LayoutInflater lf = getLayoutInflater().from(this);
view1 = lf.inflate(R.layout.recordmood, null);
view2 = lf.inflate(R.layout.sharemood, null);
view3 = lf.inflate(R.layout.countchart, null);

viewList = new ArrayList<View>();//将要分页显示的View装入数组中
viewList.add(view1);
viewList.add(view2);
viewList.add(view3);

viewPager = (ViewPager) findViewById(R.id.viewpaper);
PagerAdapter pagerAdapter =new PagerAdapter() {

@Override
public int getCount() {
// TODO Auto-generated method stub
return viewList.size();
}

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}

@Override
public void destroyItem(ViewGroup container, int position,
Object object) {
container.removeView(viewList.get(position));
}

@Override
public int getItemPosition(Object object) {
return super.getItemPosition(object);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(viewList.get(position));
/**
* 这里面可以添加当前布局文件里的按钮点击事件
*/
return viewList.get(position);
}
};
viewPager.setAdapter(pagerAdapter);
viewPager.setOnPageChangeListener(new MyOnPageChangeListener());
}


/**
* 记录心情点击事件
* @param view
*/
public void recordClick(View view) {

MyOnClickListener(0, view);

/* count+=1;
int bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.logo_qzone).getWidth();// 获取图片宽度
gf1 = (GifView)findViewById(R.id.gif1);

gf1.setGifImage(R.drawable.recordclick);
gf1.setLayoutParams(new LinearLayout.LayoutParams(bmpW, 80));
if(count>3) {
count = 1;
}
if(count==1){
image1 = (ImageView) findViewById(R.id.image1);
image1.setVisibility(View.GONE);
gf1.showAnimation();
gf1.setVisibility(View.VISIBLE);
}else if(count==2){
gf1.showCover();
}else if(count==3) {
gf1.setVisibility(View.GONE);
image1.setVisibility(View.VISIBLE);
}*/
}

/**
* 分享心情
* @param fragment
*/
public void shareClick(View view) {
MyOnClickListener(1, view);
}

/**
* 图形统计
* @param fragment
*/
public void chartClick(View view) {
MyOnClickListener(2, view);

}


/**
* 点击事件
* @param index
* @param view
*/
public void MyOnClickListener(int index, View view) {
/**
* 设置点击动画效果
*/
Animation clickAnimation = AnimationUtils.loadAnimation(this,R.anim.bn_zoom);
view.startAnimation(clickAnimation);
viewPager.setCurrentItem(index); // 设置点击后,显示选中的fragment
}

/**
* 页面改变时的监听事件。
* @author ws
*
*/
public class MyOnPageChangeListener implements OnPageChangeListener{

int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量
int two = one * 2;// 页卡1 -> 页卡3 偏移量

public void onPageScrollStateChanged(int arg0) {

}

public void onPageScrolled(int arg0, float arg1, int arg2) {

}

public void onPageSelected(int arg0) {
/*
Animation animation = null;
switch (arg0) {
case 0:
if (currIndex == 1) {
animation = new TranslateAnimation(one, 0, 0, 0);
} else if (currIndex == 2) {
animation = new TranslateAnimation(two, 0, 0, 0);
}
break;
case 1:
if (currIndex == 0) {
animation = new TranslateAnimation(offset, one, 0, 0);
} else if (currIndex == 2) {
animation = new TranslateAnimation(two, one, 0, 0);
}
break;
case 2:
if (currIndex == 0) {
animation = new TranslateAnimation(offset, two, 0, 0);
} else if (currIndex == 1) {
animation = new TranslateAnimation(one, two, 0, 0);
}
break;

}
*/
Animation animation = new TranslateAnimation(one*currIndex, one*arg0, 0, 0);
currIndex = arg0;
animation.setFillAfter(true);// True:图片停在动画结束位置
animation.setDuration(300);
imageView.startAnimation(animation);
Toast.makeText(MainActivity.this, "您选择了"+ viewPager.getCurrentItem()+"页卡", Toast.LENGTH_SHORT).show();
}

}

}
ipip2005 2014-06-16
  • 打赏
  • 举报
回复
哦 ,不好意思,我只是简单复制我写过代码的一段过来,其实PicInfoList.get(mSet.get(mPicSet.get(index).get(position))).bitmap 这一串只是我要填充到view里的一个bitmap对象而已,你可以选择你需要的图片放进去,getView的第一个参数position表示正在对第position个listItem进行填充,位置为position的地方应该填什么你就填什么
win-sun 2014-06-16
  • 打赏
  • 举报
回复
holder.setImageBitmap(PicInfoList.get(mSet.get(mPicSet.get(index).get(position))).bitmap); 这个PicInfoList是什么?里面的参数是什么格式的?
引用 1 楼 ipip2005 的回复:
我也遇到过这个问题,具体原因我觉得如下 你虽然指定了对象和view的绑定关系,即你指定了R.drawable.pic1应该放到R.id.gif所指的View里,但是你并没有说明这个view是怎么展示这个数据的。因为View有多种设置数据的方式。比如imageview其实并不只有一个setImageBitmap方法。 建议复杂的listitem的话,直接写一个继承自BaseAdapter的类来完成,重写getView方法,来指定你的每个view是怎么使用绑定的数据集的。用viewholder还可以作到优化,具体写法像这样:
private class PictureAdapter extends BaseAdapter{
   		private LayoutInflater mInflater;
   		public PictureAdapter(Context context){
   			this.mInflater = LayoutInflater.from(context);
   		}
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			// TODO Auto-generated method stub
			ImageView holder;
			if (convertView == null){ 
				int lid = R.layout.map_ontap_grid;;
				holder = new ImageView(MapActivity.this);
				convertView = mInflater.inflate(lid, null);
				holder = (ImageView) convertView.findViewById(R.id.mapgridimage);
				convertView.setTag(holder);
			} else{
				holder = (ImageView) convertView.getTag();
			}
			holder.setImageBitmap(PicInfoList.get(mSet.get(mPicSet.get(index).get(position))).bitmap);
			return convertView;
		}
		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return mPicSet.get(index).size();
		}
		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return PicInfoList.get(mSet.get(mPicSet.get(index).get(position))).bitmap;
		}
		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return position;
		}
   	
   }
ipip2005 2014-06-16
  • 打赏
  • 举报
回复
我也遇到过这个问题,具体原因我觉得如下 你虽然指定了对象和view的绑定关系,即你指定了R.drawable.pic1应该放到R.id.gif所指的View里,但是你并没有说明这个view是怎么展示这个数据的。因为View有多种设置数据的方式。比如imageview其实并不只有一个setImageBitmap方法。 建议复杂的listitem的话,直接写一个继承自BaseAdapter的类来完成,重写getView方法,来指定你的每个view是怎么使用绑定的数据集的。用viewholder还可以作到优化,具体写法像这样:
private class PictureAdapter extends BaseAdapter{
   		private LayoutInflater mInflater;
   		public PictureAdapter(Context context){
   			this.mInflater = LayoutInflater.from(context);
   		}
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			// TODO Auto-generated method stub
			ImageView holder;
			if (convertView == null){ 
				int lid = R.layout.map_ontap_grid;;
				holder = new ImageView(MapActivity.this);
				convertView = mInflater.inflate(lid, null);
				holder = (ImageView) convertView.findViewById(R.id.mapgridimage);
				convertView.setTag(holder);
			} else{
				holder = (ImageView) convertView.getTag();
			}
			holder.setImageBitmap(PicInfoList.get(mSet.get(mPicSet.get(index).get(position))).bitmap);
			return convertView;
		}
		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return mPicSet.get(index).size();
		}
		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return PicInfoList.get(mSet.get(mPicSet.get(index).get(position))).bitmap;
		}
		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return position;
		}
   	
   }

80,361

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧