看来你对listview还不是很熟悉啊。你传给adapter的不是一个list<object> 么? 我看你下面的回复,你的object中,包含一个textview的值,一个imageview的值,再加一个变量boolean flag 不就好了么,这样每个item都有自己一个独立的flag(我对viewHolder不是很熟悉,就不乱说了)??我把点击事件给你说得详细点吧。 你在activity中设置你的listview item的点击事件,listview.setOnItemClickListener(OnItemClickListener); 在OnItemClickListener中有一个必须重写的方法:public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //其中有个参数是 int position,这个就是你点击listview时对应点的哪个item的位置, //通过这个参数,你可以找到对应的item的flag }
看来你对listview还不是很熟悉啊。你传给adapter的不是一个list<object> 么? 我看你下面的回复,你的object中,包含一个textview的值,一个imageview的值,再加一个变量boolean flag 不就好了么,这样每个item都有自己一个独立的flag(我对viewHolder不是很熟悉,就不乱说了)??我把点击事件给你说得详细点吧。 你在activity中设置你的listview item的点击事件,listview.setOnItemClickListener(OnItemClickListener); 在OnItemClickListener中有一个必须重写的方法:public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //其中有个参数是 int position,这个就是你点击listview时对应点的哪个item的位置, //通过这个参数,你可以找到对应的item的flag } @pang376654973 非常感谢您的回复 但是还有些地方不太明白呀,代码如下: public class InformationAdapter extends BaseAdapter { 。 public int getCount() { Log.d(TAG,"InformationAdapter: public int getCount()"); return Informationlist.size(); }
public Object getItem( int position ) { Log.d(TAG,"InformationAdapter: public Object getItem( int position ) position ="+position); return position; }
public long getItemId( int position ) { Log.d(TAG,"informationadapter:public long getItemId( int position )"); return position; } public View getView(int position,View convertView,ViewGroup parent ) { Log.d(TAG,"InformationAdapter: public View getView"); 。。 。。 } }另外上面的界面是在fragment上显示的 : public class InformationFragment extends BaseFragment {
listView11.setOnItemClickListener( new OnItemClickListener() { public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is position Log.d(TAG,"listView11 onItemClick InformationFragment position = "+arg2);
} });
} 当点击某一个item的时候, 03-11 10:34:17.265: D/InformationAdapter(31193): informationadapter:public long getItemId( int position ) 03-11 10:34:17.270: D/InformationAdapter(31193): InformationAdapter: public int getCount() 03-11 10:34:17.335: D/InformationAdapter(31193): InformationAdapter: public int getCount() 03-11 10:34:17.335: D/InformationAdapter(31193): informationadapter:public long getItemId( int position ) 03-11 10:34:17.340: D/InformationFragment(31193): listView11 onItemClick InformationFragment position = 4它只是调用了这些函数。 奇怪的是顺序为什么 getItemId()--》getCount()-》getItemId()-》 getItemId()--》最后就是 我的理解是 把 flag放在一个数组里边, 数组的第一个位置代表 item1,以此类推。它的值不同就代表不同的状态。但是 这个 应该放在哪个函数处理呢? getItemId()?getCount()?还是?但是当点击的时候,代码没有跑 public View getView(int position,View convertView,ViewGroup parent ) 这个函数的 。麻烦再回复下,谢啦 会的朋友麻烦也帮忙回复下吧,谢谢
看来你对listview还不是很熟悉啊。你传给adapter的不是一个list<object> 么? 我看你下面的回复,你的object中,包含一个textview的值,一个imageview的值,再加一个变量boolean flag 不就好了么,这样每个item都有自己一个独立的flag(我对viewHolder不是很熟悉,就不乱说了)??我把点击事件给你说得详细点吧。 你在activity中设置你的listview item的点击事件,listview.setOnItemClickListener(OnItemClickListener); 在OnItemClickListener中有一个必须重写的方法:public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //其中有个参数是 int position,这个就是你点击listview时对应点的哪个item的位置, //通过这个参数,你可以找到对应的item的flag } @pang376654973 非常感谢您的回复 但是还有些地方不太明白呀,代码如下: public class InformationAdapter extends BaseAdapter { 。 public int getCount() { Log.d(TAG,"InformationAdapter: public int getCount()"); return Informationlist.size(); }
public Object getItem( int position ) { Log.d(TAG,"InformationAdapter: public Object getItem( int position ) position ="+position); return position; }
public long getItemId( int position ) { Log.d(TAG,"informationadapter:public long getItemId( int position )"); return position; } public View getView(int position,View convertView,ViewGroup parent ) { Log.d(TAG,"InformationAdapter: public View getView"); 。。 。。 } }另外上面的界面是在fragment上显示的 : public class InformationFragment extends BaseFragment {
listView11.setOnItemClickListener( new OnItemClickListener() { public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is position Log.d(TAG,"listView11 onItemClick InformationFragment position = "+arg2);
} });
} 当点击某一个item的时候, 03-11 10:34:17.265: D/InformationAdapter(31193): informationadapter:public long getItemId( int position ) 03-11 10:34:17.270: D/InformationAdapter(31193): InformationAdapter: public int getCount() 03-11 10:34:17.335: D/InformationAdapter(31193): InformationAdapter: public int getCount() 03-11 10:34:17.335: D/InformationAdapter(31193): informationadapter:public long getItemId( int position ) 03-11 10:34:17.340: D/InformationFragment(31193): listView11 onItemClick InformationFragment position = 4它只是调用了这些函数。 奇怪的是顺序为什么 getItemId()--》getCount()-》getItemId()-》 getItemId()--》最后就是 我的理解是 把 flag放在一个数组里边, 数组的第一个位置代表 item1,以此类推。它的值不同就代表不同的状态。但是 这个 应该放在哪个函数处理呢? getItemId()?getCount()?还是?但是当点击的时候,代码没有跑 public View getView(int position,View convertView,ViewGroup parent ) 这个函数的 。麻烦再回复下,谢啦 会的朋友麻烦也帮忙回复下吧,谢谢 首先,我建议你去好好看看listview的讲解,网上,书上都行。public Object getItem( int position ),adapter里面这个函数不应该return position。 这个函数的意思是返回你点击那个item的数据,也就是你传入那个list的具体的一个。应该写成这样: public Object getItem( int position ) { return Informationlist.get(position).; } 这样你要获得对应item的值,只需要在item的点击事件中写 adapter.getItem.getflag就行了。 当然你需要在list<object>的object中写好flag的get,set方法。然后你的下一个问题,getView跑的时候不是点击item的时候,这个方法的作用是, 展示view的,比如你当前页面初始能展示5个item,当你往下滑,这个时候第6个item 就要出现了,这时adapter就会自动调用getView()去生成一个view赋给新出现的item。 所以getView()不是你点击item的时候会调用的。
public void addlist( List<Inte> addlist) { try { for ( Inte Intes : addlist ) { HashMap<String,Object> item = new HashMap<String,Object>(); item.put("v", Interests.get_v()); //获取从网络数据库得到的 版本v Informationlist.add(item); } } catch ( Exception e ) { e.printStackTrace(); } }} 但是上面这个界面是在fragment显示的 在 public class InformationFragment extends BaseFragment {
listView11.setOnItemClickListener( new OnItemClickListener() { public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is position Log.d(TAG,"yong: listView11 onItemClick InformationFragment position = "+arg2);
} });
private final Handler mHandler = new Handler() { public void handleMessage{ mInfo = new InformationAdapter(getActivity(),list1); //list1 为从网络数据库获取的数据 mInfo .addlist(list1); listView11.setAdapter(mInfo ); 。
} }
@pang376654973 由于项目紧,请多多包涵
不知道你从网上下的数据的格式,我就简单跟你说一说。假如你网上的下的数据是很多个object的集合,每个object都包含一个图片和一条文字(json,xml格式什么的处理流程都一样), 这样你需要把网上的数据解析成一个个图片,一个文字。 解析好后,你自己写一个实体类,就如就叫Infor,里面写你需要存的数据,针对上面的假设条件,可以这么写:public class Infor { public String picture;//从网上得到的图片一般来说是一个网址,也就是一个string public String word; public boolean flag;
public Infor(){
} public String getPicture() { return picture; } public void setPicture(String picture) { this.picture = picture; } public String getWord() { return word; } public void setWord(String word) { this.word = word; } public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; }
不知道你从网上下的数据的格式,我就简单跟你说一说。假如你网上的下的数据是很多个object的集合,每个object都包含一个图片和一条文字(json,xml格式什么的处理流程都一样), 这样你需要把网上的数据解析成一个个图片,一个文字。 解析好后,你自己写一个实体类,就如就叫Infor,里面写你需要存的数据,针对上面的假设条件,可以这么写:public class Infor { public String picture;//从网上得到的图片一般来说是一个网址,也就是一个string public String word; public boolean flag;
public Infor(){
} public String getPicture() { return picture; } public void setPicture(String picture) { this.picture = picture; } public String getWord() { return word; } public void setWord(String word) { this.word = word; } public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; }
不知道你从网上下的数据的格式,我就简单跟你说一说。假如你网上的下的数据是很多个object的集合,每个object都包含一个图片和一条文字(json,xml格式什么的处理流程都一样), 这样你需要把网上的数据解析成一个个图片,一个文字。 解析好后,你自己写一个实体类,就如就叫Infor,里面写你需要存的数据,针对上面的假设条件,可以这么写:public class Infor { public String picture;//从网上得到的图片一般来说是一个网址,也就是一个string public String word; public boolean flag;
public Infor(){
} public String getPicture() { return picture; } public void setPicture(String picture) { this.picture = picture; } public String getWord() { return word; } public void setWord(String word) { this.word = word; } public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; }
看来你对listview还不是很熟悉啊。你传给adapter的不是一个list<object> 么? 我看你下面的回复,你的object中,包含一个textview的值,一个imageview的值,再加一个变量boolean flag 不就好了么,这样每个item都有自己一个独立的flag(我对viewHolder不是很熟悉,就不乱说了)??我把点击事件给你说得详细点吧。 你在activity中设置你的listview item的点击事件,listview.setOnItemClickListener(OnItemClickListener); 在OnItemClickListener中有一个必须重写的方法:public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //其中有个参数是 int position,这个就是你点击listview时对应点的哪个item的位置, //通过这个参数,你可以找到对应的item的flag } @pang376654973 非常感谢您的回复 但是还有些地方不太明白呀,代码如下: public class InformationAdapter extends BaseAdapter { 。 public int getCount() { Log.d(TAG,"InformationAdapter: public int getCount()"); return Informationlist.size(); }
public Object getItem( int position ) { Log.d(TAG,"InformationAdapter: public Object getItem( int position ) position ="+position); return position; }
public long getItemId( int position ) { Log.d(TAG,"informationadapter:public long getItemId( int position )"); return position; } public View getView(int position,View convertView,ViewGroup parent ) { Log.d(TAG,"InformationAdapter: public View getView"); 。。 。。 } }另外上面的界面是在fragment上显示的 : public class InformationFragment extends BaseFragment {
listView11.setOnItemClickListener( new OnItemClickListener() { public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is position Log.d(TAG,"listView11 onItemClick InformationFragment position = "+arg2);
} });
} 当点击某一个item的时候, 03-11 10:34:17.265: D/InformationAdapter(31193): informationadapter:public long getItemId( int position ) 03-11 10:34:17.270: D/InformationAdapter(31193): InformationAdapter: public int getCount() 03-11 10:34:17.335: D/InformationAdapter(31193): InformationAdapter: public int getCount() 03-11 10:34:17.335: D/InformationAdapter(31193): informationadapter:public long getItemId( int position ) 03-11 10:34:17.340: D/InformationFragment(31193): listView11 onItemClick InformationFragment position = 4它只是调用了这些函数。 奇怪的是顺序为什么 getItemId()--》getCount()-》getItemId()-》 getItemId()--》最后就是 我的理解是 把 flag放在一个数组里边, 数组的第一个位置代表 item1,以此类推。它的值不同就代表不同的状态。但是 这个 应该放在哪个函数处理呢? getItemId()?getCount()?还是?但是当点击的时候,代码没有跑 public View getView(int position,View convertView,ViewGroup parent ) 这个函数的 。麻烦再回复下,谢啦 会的朋友麻烦也帮忙回复下吧,谢谢 首先,我建议你去好好看看listview的讲解,网上,书上都行。public Object getItem( int position ),adapter里面这个函数不应该return position。 这个函数的意思是返回你点击那个item的数据,也就是你传入那个list的具体的一个。应该写成这样: public Object getItem( int position ) { return Informationlist.get(position).; } 这样你要获得对应item的值,只需要在item的点击事件中写 adapter.getItem.getflag就行了。 当然你需要在list<object>的object中写好flag的get,set方法。然后你的下一个问题,getView跑的时候不是点击item的时候,这个方法的作用是, 展示view的,比如你当前页面初始能展示5个item,当你往下滑,这个时候第6个item 就要出现了,这时adapter就会自动调用getView()去生成一个view赋给新出现的item。 所以getView()不是你点击item的时候会调用的。 @ pang376654973 麻烦再帮忙回复下,谢啦。我已经按照您所说给数据 添加 flag,但是在 fragment 显示的界面的 listview click事件: 这句话,会提示错误: mInformationAdapter.getItem(arg2).getFlag() 提示错误是: the method getFlag() is undefined of the type Object.listView11.setOnItemClickListener( new OnItemClickListener() { public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is position Log.d(TAG,"yong: listView11 onItemClick InformationFragment position = "+arg2); Log.d(TAG,"yong: ++mInformationAdapter.getItem(arg2)= "+mInformationAdapter.getItem(arg2)); if( mInformationAdapter.getItem(arg2).getFlag() ) { Log.d(TAG,"abc "); } } }); 而 为从网络取得的数据,添加了Flag,这个添加是在 自定义adapter里边处理 public class InformationAdapter extends BaseAdapter { 。。 public void alist( List<Inte> alist) { // 这个在fragment显示的文件里边 调用设置list ,mInformationAdapter.addlist(list1); try { for ( Inte Intes : alist ) { InformationData Infor = new InformationData(); Infor.setFlag(false); Infor.setWord(Intes.get_n()); Informationlist.add(Infor); } } catch ( Exception e ) { e.printStackTrace(); } }
}
@cheyan_517967268 谢谢回复 我实在是在网上没有找到我想要的哦,方便的话麻烦给个链接吧。 另外这个问题,现在就是剩下: 这句话,会提示错误: 如果会的朋友,麻烦指出是哪里错误吧,谢啦 mInformationAdapter.getItem(arg2).getFlag() 提示错误是: the method getFlag() is undefined of the type Object.listView11.setOnItemClickListener( new OnItemClickListener() { public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is position Log.d(TAG,"yong: listView11 onItemClick InformationFragment position = "+arg2); Log.d(TAG,"yong: ++mInformationAdapter.getItem(arg2)= "+mInformationAdapter.getItem(arg2)); if( mInformationAdapter.getItem(arg2).getFlag() ) { Log.d(TAG,"abc "); } } });
我觉得计数还是要放到你自定义的adapter里面比较好,大概的思路可以这样写在adapter中有一个全局变量count=0,这个变量有get和set方法,当你的item发生
点击事件时,去adapter中get count这个变量,如果小于3,显示后面的勾勾,并且把
count+1 set回adapter并且建议你的item还要设一个变量boolean flag,默认为false,这个变量判断这个item是否打了勾勾,
点击这个item的时候,判断这个变量是否为false,如果为false,去做后面的事情,
如果能打勾勾,再把这个变量set 为true。
如果为true,就把后面的勾勾取消掉,flag set 回false。
这样你就还可以防止点错勾勾,可以取消勾了。打得有点乱,不晓得我说明白没
怎么区分 是 item1 的标志位 而不是 item2 的标志位呢?
就是 item1 怎么跟 对应的标志位 flag 对应起来
item2 怎么跟 对应的标志位 flag 对应起来代码 不太清楚怎么写区分
麻烦再说下吧,谢谢啦
请问 在 public View getView(int position,View convertView,ViewGroup parent ) { ViewHolder viewHolder = null;
try {
if ( convertView == null ) {
convertView = layoutInflater.from(context).inflate(R.layout.item_information, null);//yong
viewHolder = new ViewHolder();
viewHolder.textview_info = (TextView) convertView.findViewById(R.id.textview_info);
viewHolder.imageview_correct = (ImageView) convertView.findViewById(R.id.imageview_correct);
viewHolder.layout_info = (RelativeLayout) convertView.findViewById(R.id.wodeguangzhu_layout);
// layout_info 里边有 textview 和 imageview
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.textview_info.setText(Informationlist.get(position).get("n").toString());
} catch ( Exception e ) {
e.printStackTrace();
}
return convertView;
} 里边 怎么添加 layout_info的点击事件呢 和怎么写代表是 第i 个item的 相对布局呢 麻烦会的朋友回复 谢谢
我看你下面的回复,你的object中,包含一个textview的值,一个imageview的值,再加一个变量boolean flag
不就好了么,这样每个item都有自己一个独立的flag(我对viewHolder不是很熟悉,就不乱说了)??我把点击事件给你说得详细点吧。
你在activity中设置你的listview item的点击事件,listview.setOnItemClickListener(OnItemClickListener);
在OnItemClickListener中有一个必须重写的方法:public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
//其中有个参数是 int position,这个就是你点击listview时对应点的哪个item的位置,
//通过这个参数,你可以找到对应的item的flag
}
我看你下面的回复,你的object中,包含一个textview的值,一个imageview的值,再加一个变量boolean flag
不就好了么,这样每个item都有自己一个独立的flag(我对viewHolder不是很熟悉,就不乱说了)??我把点击事件给你说得详细点吧。
你在activity中设置你的listview item的点击事件,listview.setOnItemClickListener(OnItemClickListener);
在OnItemClickListener中有一个必须重写的方法:public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
//其中有个参数是 int position,这个就是你点击listview时对应点的哪个item的位置,
//通过这个参数,你可以找到对应的item的flag
}
@pang376654973 非常感谢您的回复
但是还有些地方不太明白呀,代码如下:
public class InformationAdapter extends BaseAdapter {
。 public int getCount() {
Log.d(TAG,"InformationAdapter: public int getCount()");
return Informationlist.size();
}
public Object getItem( int position ) {
Log.d(TAG,"InformationAdapter: public Object getItem( int position ) position ="+position);
return position;
}
public long getItemId( int position ) {
Log.d(TAG,"informationadapter:public long getItemId( int position )");
return position;
} public View getView(int position,View convertView,ViewGroup parent ) {
Log.d(TAG,"InformationAdapter: public View getView");
。。
。。
}
}另外上面的界面是在fragment上显示的 :
public class InformationFragment extends BaseFragment {
listView11.setOnItemClickListener( new OnItemClickListener() {
public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is position
Log.d(TAG,"listView11 onItemClick InformationFragment position = "+arg2);
}
});
}
当点击某一个item的时候,
03-11 10:34:17.265: D/InformationAdapter(31193): informationadapter:public long getItemId( int position )
03-11 10:34:17.270: D/InformationAdapter(31193): InformationAdapter: public int getCount()
03-11 10:34:17.335: D/InformationAdapter(31193): InformationAdapter: public int getCount()
03-11 10:34:17.335: D/InformationAdapter(31193): informationadapter:public long getItemId( int position )
03-11 10:34:17.340: D/InformationFragment(31193): listView11 onItemClick InformationFragment position = 4它只是调用了这些函数。 奇怪的是顺序为什么 getItemId()--》getCount()-》getItemId()-》 getItemId()--》最后就是 我的理解是 把 flag放在一个数组里边, 数组的第一个位置代表 item1,以此类推。它的值不同就代表不同的状态。但是 这个 应该放在哪个函数处理呢? getItemId()?getCount()?还是?但是当点击的时候,代码没有跑 public View getView(int position,View convertView,ViewGroup parent ) 这个函数的 。麻烦再回复下,谢啦
会的朋友麻烦也帮忙回复下吧,谢谢
我看你下面的回复,你的object中,包含一个textview的值,一个imageview的值,再加一个变量boolean flag
不就好了么,这样每个item都有自己一个独立的flag(我对viewHolder不是很熟悉,就不乱说了)??我把点击事件给你说得详细点吧。
你在activity中设置你的listview item的点击事件,listview.setOnItemClickListener(OnItemClickListener);
在OnItemClickListener中有一个必须重写的方法:public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
//其中有个参数是 int position,这个就是你点击listview时对应点的哪个item的位置,
//通过这个参数,你可以找到对应的item的flag
}
@pang376654973 非常感谢您的回复
但是还有些地方不太明白呀,代码如下:
public class InformationAdapter extends BaseAdapter {
。 public int getCount() {
Log.d(TAG,"InformationAdapter: public int getCount()");
return Informationlist.size();
}
public Object getItem( int position ) {
Log.d(TAG,"InformationAdapter: public Object getItem( int position ) position ="+position);
return position;
}
public long getItemId( int position ) {
Log.d(TAG,"informationadapter:public long getItemId( int position )");
return position;
} public View getView(int position,View convertView,ViewGroup parent ) {
Log.d(TAG,"InformationAdapter: public View getView");
。。
。。
}
}另外上面的界面是在fragment上显示的 :
public class InformationFragment extends BaseFragment {
listView11.setOnItemClickListener( new OnItemClickListener() {
public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is position
Log.d(TAG,"listView11 onItemClick InformationFragment position = "+arg2);
}
});
}
当点击某一个item的时候,
03-11 10:34:17.265: D/InformationAdapter(31193): informationadapter:public long getItemId( int position )
03-11 10:34:17.270: D/InformationAdapter(31193): InformationAdapter: public int getCount()
03-11 10:34:17.335: D/InformationAdapter(31193): InformationAdapter: public int getCount()
03-11 10:34:17.335: D/InformationAdapter(31193): informationadapter:public long getItemId( int position )
03-11 10:34:17.340: D/InformationFragment(31193): listView11 onItemClick InformationFragment position = 4它只是调用了这些函数。 奇怪的是顺序为什么 getItemId()--》getCount()-》getItemId()-》 getItemId()--》最后就是 我的理解是 把 flag放在一个数组里边, 数组的第一个位置代表 item1,以此类推。它的值不同就代表不同的状态。但是 这个 应该放在哪个函数处理呢? getItemId()?getCount()?还是?但是当点击的时候,代码没有跑 public View getView(int position,View convertView,ViewGroup parent ) 这个函数的 。麻烦再回复下,谢啦
会的朋友麻烦也帮忙回复下吧,谢谢
首先,我建议你去好好看看listview的讲解,网上,书上都行。public Object getItem( int position ),adapter里面这个函数不应该return position。
这个函数的意思是返回你点击那个item的数据,也就是你传入那个list的具体的一个。应该写成这样:
public Object getItem( int position ) {
return Informationlist.get(position).;
}
这样你要获得对应item的值,只需要在item的点击事件中写 adapter.getItem.getflag就行了。
当然你需要在list<object>的object中写好flag的get,set方法。然后你的下一个问题,getView跑的时候不是点击item的时候,这个方法的作用是,
展示view的,比如你当前页面初始能展示5个item,当你往下滑,这个时候第6个item
就要出现了,这时adapter就会自动调用getView()去生成一个view赋给新出现的item。
所以getView()不是你点击item的时候会调用的。
如果你连我说得这些都听不懂的话,我建议你就先不要写这么复杂的listView了。
毕竟listview是个很基础的东西,建议你搞明白。先写一个简单的listview,成功后。
再学习写自定义的adapter,怎么传值,里面的每个方法是什么意思。
这些搞懂了,你最开始的问题就是小儿科了。
一步一步来,不要急了。
如果你连我说得这些都听不懂的话,我建议你就先不要写这么复杂的listView了。
毕竟listview是个很基础的东西,建议你搞明白。先写一个简单的listview,成功后。
再学习写自定义的adapter,怎么传值,里面的每个方法是什么意思。
这些搞懂了,你最开始的问题就是小儿科了。
一步一步来,不要急了。@pang376654973 非常感谢您的回答
这个 getItem() getcount() getview()这个具体什么作用弄明白了。
但是您所说的 adapter.getItem.getflag 当然你需要在list<object>的object中写好flag的get,set方法。
请问 list<object>的object中写好flag的get,set 方法, 也就是说 要在 Inte里边写这个方法了。
但是这个具体怎么写,我还是不太清楚,毕竟这个Inte 是跟从网络数据库获取的数据有关联的。还有 比如 如果通过adapter.getItem.getflag,获得标志位后, 根据标志为,代码是怎么写 可以 设置imageview :imageview_correct 的可见性呢?
前期就是要有 怎么表示 找到 该imageview,即类似 findviewbyid();
也就是 比如 要把这个 imageview_correct.setVisible(View.INVISIBLE); 麻烦再回复下,谢谢
在自定义的adapter代码如下:
public class InformationAdapter extends BaseAdapter {
public void addlist( List<Inte> addlist) {
try {
for ( Inte Intes : addlist ) {
HashMap<String,Object> item = new HashMap<String,Object>();
item.put("v", Interests.get_v()); //获取从网络数据库得到的 版本v
Informationlist.add(item);
}
} catch ( Exception e ) {
e.printStackTrace();
}
}}
但是上面这个界面是在fragment显示的
在 public class InformationFragment extends BaseFragment {
listView11.setOnItemClickListener( new OnItemClickListener() {
public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is position
Log.d(TAG,"yong: listView11 onItemClick InformationFragment position = "+arg2);
}
});
private final Handler mHandler = new Handler() {
public void handleMessage{ mInfo = new InformationAdapter(getActivity(),list1); //list1 为从网络数据库获取的数据
mInfo .addlist(list1);
listView11.setAdapter(mInfo );
。
}
}
不知道你从网上下的数据的格式,我就简单跟你说一说。假如你网上的下的数据是很多个object的集合,每个object都包含一个图片和一条文字(json,xml格式什么的处理流程都一样),
这样你需要把网上的数据解析成一个个图片,一个文字。
解析好后,你自己写一个实体类,就如就叫Infor,里面写你需要存的数据,针对上面的假设条件,可以这么写:public class Infor { public String picture;//从网上得到的图片一般来说是一个网址,也就是一个string
public String word;
public boolean flag;
public Infor(){
} public String getPicture() {
return picture;
} public void setPicture(String picture) {
this.picture = picture;
} public String getWord() {
return word;
} public void setWord(String word) {
this.word = word;
} public boolean isFlag() {
return flag;
} public void setFlag(boolean flag) {
this.flag = flag;
}
}这样你的实体类里面包含所有你需要的数据加上flag;
然后new你的实体类,并且用你的网上数据来给这个新new的对象赋值。Infor infor = new Infor();
infor.setPicture(你从网上得到的数据);
infor.setWord(你从网上得到的数据);
infor.setFlag(false);
然后再将这个对象交给你的list
Informationlist.add(infor);还有数据你就不停new Infor的对象,不停赋值,不停交给你的list,最后将这个list交给adapter就行了。
一般来说,我们会根据网上的数据的格式来写个for循环,来控制new多少个infor对象,自动赋值。
因为不知道你从网上下的是什么数据,所以就不乱说了,你自己根据网上数据的来设定条件吧。
不知道你从网上下的数据的格式,我就简单跟你说一说。假如你网上的下的数据是很多个object的集合,每个object都包含一个图片和一条文字(json,xml格式什么的处理流程都一样),
这样你需要把网上的数据解析成一个个图片,一个文字。
解析好后,你自己写一个实体类,就如就叫Infor,里面写你需要存的数据,针对上面的假设条件,可以这么写:public class Infor { public String picture;//从网上得到的图片一般来说是一个网址,也就是一个string
public String word;
public boolean flag;
public Infor(){
} public String getPicture() {
return picture;
} public void setPicture(String picture) {
this.picture = picture;
} public String getWord() {
return word;
} public void setWord(String word) {
this.word = word;
} public boolean isFlag() {
return flag;
} public void setFlag(boolean flag) {
this.flag = flag;
}
}这样你的实体类里面包含所有你需要的数据加上flag;
然后new你的实体类,并且用你的网上数据来给这个新new的对象赋值。Infor infor = new Infor();
infor.setPicture(你从网上得到的数据);
infor.setWord(你从网上得到的数据);
infor.setFlag(false);
然后再将这个对象交给你的list
Informationlist.add(infor);还有数据你就不停new Infor的对象,不停赋值,不停交给你的list,最后将这个list交给adapter就行了。
一般来说,我们会根据网上的数据的格式来写个for循环,来控制new多少个infor对象,自动赋值。
因为不知道你从网上下的是什么数据,所以就不乱说了,你自己根据网上数据的来设定条件吧。
谢谢楼上各位朋友的回复@ pang376654973 非常感谢您热心的回复, 这个问题还有点问题,就解决了。
麻烦再帮忙回复下吧,谢啦请问, 当点击某个item项的时候,经过判断需要显示 “勾勾” ,图案的时候,代码中怎么写代表找到了这个 控件,然后把它设置为 可见。
即是:
public class InformationFragment extends BaseFragment {
listView11.setOnItemClickListener( new OnItemClickListener() { //点击事件
public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is position
Log.d(TAG,"listView11 onItemClick InformationFragment position = "+arg2);
if (madapter.getItem.getflag){ // 假设madapter.getItem.getflag 为false,括号里边需要显示 “勾勾”
xxxxx ; 怎么表示是找到该 item的 gougou_id 这个控件呢 也就是这种 findViewById(R.id.gougou_id );
然后就可以把它设置为可见。 setVisibility(View.INVISIBLE);
麻烦也说下这样写可见是否对了 }
});
}
当点从网络数据库中取到的数据如下格式:data: [
{"v":1, "n": 信息}
{"v":2, "n":内容}
{"v":3, "n":课本}
{"v":4, "n":数学}
]也就是要把它显示在 listview中:信息
内容
课本
数学只不过 当用户点击,“信息” 的时候, 就要在信息 最右边 出现 “勾勾” 即:信息 勾勾
内容
课本
数学也就是说在 自定的adapter的布局文件 item _selected.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FAFAFA"
android:orientation="vertical" > <RelativeLayout
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="#36B8FF" > <TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textSize = "20sp"
android:textColor ="#707070"
android:layout_alignParentLeft="true"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:id="@+id/v">
</TextView> <ImageView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textSize = "20sp"
android:textColor ="#707070"
android:layout_alignParentRight="true"
android:visibility="invisible"
android:src="@drawable/gougou" //这个打勾的 图案是人为添加的,就是为了告诉
用户他点击过,接着再做相应的处理。
android:id="@+id/gougou_id">
</TextView>
</RelativeLayout>
</LinearLayout>
不知道你从网上下的数据的格式,我就简单跟你说一说。假如你网上的下的数据是很多个object的集合,每个object都包含一个图片和一条文字(json,xml格式什么的处理流程都一样),
这样你需要把网上的数据解析成一个个图片,一个文字。
解析好后,你自己写一个实体类,就如就叫Infor,里面写你需要存的数据,针对上面的假设条件,可以这么写:public class Infor { public String picture;//从网上得到的图片一般来说是一个网址,也就是一个string
public String word;
public boolean flag;
public Infor(){
} public String getPicture() {
return picture;
} public void setPicture(String picture) {
this.picture = picture;
} public String getWord() {
return word;
} public void setWord(String word) {
this.word = word;
} public boolean isFlag() {
return flag;
} public void setFlag(boolean flag) {
this.flag = flag;
}
}这样你的实体类里面包含所有你需要的数据加上flag;
然后new你的实体类,并且用你的网上数据来给这个新new的对象赋值。Infor infor = new Infor();
infor.setPicture(你从网上得到的数据);
infor.setWord(你从网上得到的数据);
infor.setFlag(false);
然后再将这个对象交给你的list
Informationlist.add(infor);还有数据你就不停new Infor的对象,不停赋值,不停交给你的list,最后将这个list交给adapter就行了。
一般来说,我们会根据网上的数据的格式来写个for循环,来控制new多少个infor对象,自动赋值。
因为不知道你从网上下的是什么数据,所以就不乱说了,你自己根据网上数据的来设定条件吧。
谢谢楼上各位朋友的回复@ pang376654973 非常感谢您热心的回复, 这个问题还有点问题,就解决了。
麻烦再帮忙回复下吧,谢啦请问, 当点击某个item项的时候,经过判断需要显示 “勾勾” ,图案的时候,代码中怎么写代表找到了这个 控件,然后把它设置为 可见。
即是:
public class InformationFragment extends BaseFragment {
listView11.setOnItemClickListener( new OnItemClickListener() { //点击事件
public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is position
Log.d(TAG,"listView11 onItemClick InformationFragment position = "+arg2);
if (madapter.getItem.getflag){ // 假设madapter.getItem.getflag 为false,括号里边需要显示 “勾勾”
xxxxx ; 怎么表示是找到该 item的 gougou_id 这个控件呢 也就是这种 findViewById(R.id.gougou_id );
然后就可以把它设置为可见。 setVisibility(View.INVISIBLE);
麻烦也说下这样写可见是否对了 }
});
}
当点从网络数据库中取到的数据如下格式:data: [
{"v":1, "n": 信息}
{"v":2, "n":内容}
{"v":3, "n":课本}
{"v":4, "n":数学}
]也就是要把它显示在 listview中:信息
内容
课本
数学只不过 当用户点击,“信息” 的时候, 就要在信息 最右边 出现 “勾勾” 即:信息 勾勾
内容
课本
数学也就是说在 自定的adapter的布局文件 item _selected.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FAFAFA"
android:orientation="vertical" > <RelativeLayout
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="#36B8FF" > <TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textSize = "20sp"
android:textColor ="#707070"
android:layout_alignParentLeft="true"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:id="@+id/v">
</TextView> <ImageView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textSize = "20sp"
android:textColor ="#707070"
android:layout_alignParentRight="true"
android:visibility="invisible"
android:src="@drawable/gougou" //这个打勾的 图案是人为添加的,就是为了告诉
用户他点击过,接着再做相应的处理。
android:id="@+id/gougou_id">
</TextView>
</RelativeLayout>
</LinearLayout>
知道怎么表示 找到该控件了 ,这个不用回复了
我看你下面的回复,你的object中,包含一个textview的值,一个imageview的值,再加一个变量boolean flag
不就好了么,这样每个item都有自己一个独立的flag(我对viewHolder不是很熟悉,就不乱说了)??我把点击事件给你说得详细点吧。
你在activity中设置你的listview item的点击事件,listview.setOnItemClickListener(OnItemClickListener);
在OnItemClickListener中有一个必须重写的方法:public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
//其中有个参数是 int position,这个就是你点击listview时对应点的哪个item的位置,
//通过这个参数,你可以找到对应的item的flag
}
@pang376654973 非常感谢您的回复
但是还有些地方不太明白呀,代码如下:
public class InformationAdapter extends BaseAdapter {
。 public int getCount() {
Log.d(TAG,"InformationAdapter: public int getCount()");
return Informationlist.size();
}
public Object getItem( int position ) {
Log.d(TAG,"InformationAdapter: public Object getItem( int position ) position ="+position);
return position;
}
public long getItemId( int position ) {
Log.d(TAG,"informationadapter:public long getItemId( int position )");
return position;
} public View getView(int position,View convertView,ViewGroup parent ) {
Log.d(TAG,"InformationAdapter: public View getView");
。。
。。
}
}另外上面的界面是在fragment上显示的 :
public class InformationFragment extends BaseFragment {
listView11.setOnItemClickListener( new OnItemClickListener() {
public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is position
Log.d(TAG,"listView11 onItemClick InformationFragment position = "+arg2);
}
});
}
当点击某一个item的时候,
03-11 10:34:17.265: D/InformationAdapter(31193): informationadapter:public long getItemId( int position )
03-11 10:34:17.270: D/InformationAdapter(31193): InformationAdapter: public int getCount()
03-11 10:34:17.335: D/InformationAdapter(31193): InformationAdapter: public int getCount()
03-11 10:34:17.335: D/InformationAdapter(31193): informationadapter:public long getItemId( int position )
03-11 10:34:17.340: D/InformationFragment(31193): listView11 onItemClick InformationFragment position = 4它只是调用了这些函数。 奇怪的是顺序为什么 getItemId()--》getCount()-》getItemId()-》 getItemId()--》最后就是 我的理解是 把 flag放在一个数组里边, 数组的第一个位置代表 item1,以此类推。它的值不同就代表不同的状态。但是 这个 应该放在哪个函数处理呢? getItemId()?getCount()?还是?但是当点击的时候,代码没有跑 public View getView(int position,View convertView,ViewGroup parent ) 这个函数的 。麻烦再回复下,谢啦
会的朋友麻烦也帮忙回复下吧,谢谢
首先,我建议你去好好看看listview的讲解,网上,书上都行。public Object getItem( int position ),adapter里面这个函数不应该return position。
这个函数的意思是返回你点击那个item的数据,也就是你传入那个list的具体的一个。应该写成这样:
public Object getItem( int position ) {
return Informationlist.get(position).;
}
这样你要获得对应item的值,只需要在item的点击事件中写 adapter.getItem.getflag就行了。
当然你需要在list<object>的object中写好flag的get,set方法。然后你的下一个问题,getView跑的时候不是点击item的时候,这个方法的作用是,
展示view的,比如你当前页面初始能展示5个item,当你往下滑,这个时候第6个item
就要出现了,这时adapter就会自动调用getView()去生成一个view赋给新出现的item。
所以getView()不是你点击item的时候会调用的。
@ pang376654973
麻烦再帮忙回复下,谢啦。我已经按照您所说给数据 添加 flag,但是在 fragment 显示的界面的 listview click事件:
这句话,会提示错误:
mInformationAdapter.getItem(arg2).getFlag()
提示错误是:
the method getFlag() is undefined of the type Object.listView11.setOnItemClickListener( new OnItemClickListener() {
public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is position
Log.d(TAG,"yong: listView11 onItemClick InformationFragment position = "+arg2);
Log.d(TAG,"yong: ++mInformationAdapter.getItem(arg2)= "+mInformationAdapter.getItem(arg2));
if( mInformationAdapter.getItem(arg2).getFlag() ) {
Log.d(TAG,"abc ");
}
}
});
而 为从网络取得的数据,添加了Flag,这个添加是在 自定义adapter里边处理
public class InformationAdapter extends BaseAdapter {
。。
public void alist( List<Inte> alist) { // 这个在fragment显示的文件里边 调用设置list ,mInformationAdapter.addlist(list1);
try {
for ( Inte Intes : alist ) {
InformationData Infor = new InformationData();
Infor.setFlag(false);
Infor.setWord(Intes.get_n());
Informationlist.add(Infor);
}
} catch ( Exception e ) {
e.printStackTrace();
}
}
}
谢谢回复
我实在是在网上没有找到我想要的哦,方便的话麻烦给个链接吧。
另外这个问题,现在就是剩下:
这句话,会提示错误: 如果会的朋友,麻烦指出是哪里错误吧,谢啦
mInformationAdapter.getItem(arg2).getFlag()
提示错误是:
the method getFlag() is undefined of the type Object.listView11.setOnItemClickListener( new OnItemClickListener() {
public void onItemClick(AdapterView<?>arg0,View arg1, int arg2,long arg3) { //arg2 is position
Log.d(TAG,"yong: listView11 onItemClick InformationFragment position = "+arg2);
Log.d(TAG,"yong: ++mInformationAdapter.getItem(arg2)= "+mInformationAdapter.getItem(arg2));
if( mInformationAdapter.getItem(arg2).getFlag() ) {
Log.d(TAG,"abc ");
}
}
});
反正我目前没事,你可以加我qq,把代码发给我看看,我qq就是我名字后面的那串数字