Android listview&gridview getview 方法多次调用问题解决方法 并附上单页加载实现问卷调查适配器源代码
2014-09-03 12:04
906 查看
转自:/article/7710986.html
一 、 关于listview 的问题
(1)情况一:
今天在改毕设代码的时候,突然发现一个奇怪的现象,就是在在定义的listview中有一个imageview和一个textview,但是当启动这个listview的时候,同一个item的图片会不断的变化,很是奇怪,于是在adapter中进行调试发现,getview,执行了很多次,而且次数也不定,最后在网上发现说是由于listview的item的高度不定,所以很次都要宠幸你计算,而导致需要多次调用getview方法,只需要把该listview的父控件布局改为fill_parent就ok了,这个方法确实可以解决这个问题。所以遇到这个问题,这样改一下就可以了。
(2) 情况二 :
当然如果你还遇到在dialog中使用setadapter来加载一个listview的时候使用上面的方法就不起作用了,这个问题我也没有找到根本的原因,但是找到的解决办法就是,在getview中进行条件判断就能阻止多次调用的问题。使用下面的 判断来防止多次执行。
[java] view
plaincopyprint?
if(parent.getchildcount() == position)
{
正常情况下应该执行的代码
}
else
{
这里就是多次加载的问题,可以不用理这里面的 代码,
}
这样就可以防止多次执行getview的方法。
二 、 关于gridview 的问题
问题和上面基本上是一样的,但是不同的是 ,这个getview多次执行的只是position=0 item 所以与上面的问题有所不同,但是原因还是差不多的,它也是不知道item的高度是多少所以系统会用第一项进行加载测试,所以gridview的第一项就会多次加载。为了解决这个问题,其实方法和上面提到的第二种情况是一样的。也是在getview中进行if else 的判断就可以了。代码与上面是一样的。
[java] view
plaincopyprint?
if(parent.getchildcount() == position)
{
正常情况下应该执行的代码
}
else
{
这里就是多次加载的问题,可以不用理这里面的 代码,
}
总结下就是要我们使用布局问题的属性的时候,有时候觉得两个属性的性质差不多,但是有时候就会给我们带来很多的问题,我们以后在使用布局属性的时候要注意这些问题,尽量弄清楚每个属性的含义然后再使用,这样就会避免很多的位置的错误。希望大家以后也要注意。^_^
一 、 关于listview 的问题
(1)情况一:
今天在改毕设代码的时候,突然发现一个奇怪的现象,就是在在定义的listview中有一个imageview和一个textview,但是当启动这个listview的时候,同一个item的图片会不断的变化,很是奇怪,于是在adapter中进行调试发现,getview,执行了很多次,而且次数也不定,最后在网上发现说是由于listview的item的高度不定,所以很次都要宠幸你计算,而导致需要多次调用getview方法,只需要把该listview的父控件布局改为fill_parent就ok了,这个方法确实可以解决这个问题。所以遇到这个问题,这样改一下就可以了。
(2) 情况二 :
当然如果你还遇到在dialog中使用setadapter来加载一个listview的时候使用上面的方法就不起作用了,这个问题我也没有找到根本的原因,但是找到的解决办法就是,在getview中进行条件判断就能阻止多次调用的问题。使用下面的 判断来防止多次执行。
[java] view
plaincopyprint?
if(parent.getchildcount() == position)
{
正常情况下应该执行的代码
}
else
{
这里就是多次加载的问题,可以不用理这里面的 代码,
}
这样就可以防止多次执行getview的方法。
二 、 关于gridview 的问题
问题和上面基本上是一样的,但是不同的是 ,这个getview多次执行的只是position=0 item 所以与上面的问题有所不同,但是原因还是差不多的,它也是不知道item的高度是多少所以系统会用第一项进行加载测试,所以gridview的第一项就会多次加载。为了解决这个问题,其实方法和上面提到的第二种情况是一样的。也是在getview中进行if else 的判断就可以了。代码与上面是一样的。
[java] view
plaincopyprint?
if(parent.getchildcount() == position)
{
正常情况下应该执行的代码
}
else
{
这里就是多次加载的问题,可以不用理这里面的 代码,
}
总结下就是要我们使用布局问题的属性的时候,有时候觉得两个属性的性质差不多,但是有时候就会给我们带来很多的问题,我们以后在使用布局属性的时候要注意这些问题,尽量弄清楚每个属性的含义然后再使用,这样就会避免很多的位置的错误。希望大家以后也要注意。^_^
package com.qianhua.healthy_brain.adapter; import java.util.Map; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.RadioButton; import android.widget.TextView; import com.qianhua.healthy_brain.R; import com.qianhua.healthy_brain.ui.QuestionnaireActivity; public class QuestionnaireAdapter extends MyBaseAdapter { int next=0; View mcontentView; int mposition; boolean first=true; Holder holder=null; int sum=0; int sore[]; public QuestionnaireAdapter(Activity activity, Object[] params) { super(activity, params); // TODO Auto-generated constructor stub } @Override public int getCount() { // TODO Auto-generated method stub return 1; } @Override public Map<String, Object> getItem(int position) { // TODO Auto-generated method stub return mData.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View contentView, final ViewGroup parent) { // TODO Auto-generated method stub mcontentView=contentView; if(first==true){ // Log.e("", "position---:"+position); mposition=position; first=false; } if (mcontentView==null) { holder=new Holder(); mcontentView=mInflater.inflate(R.layout.questionnaire_page_item, null); holder.title=(TextView)mcontentView.findViewById(R.id.questionnaire_question_title); holder.radiobuttons=new RadioButton[4]; holder.radiobuttons[0]=(RadioButton)mcontentView.findViewById(R.id.questionnaire_answer_radioButton1); holder.radiobuttons[1]=(RadioButton)mcontentView.findViewById(R.id.questionnaire_answer_radioButton2); holder.radiobuttons[2]=(RadioButton)mcontentView.findViewById(R.id.questionnaire_answer_radioButton3); holder.radiobuttons[3]=(RadioButton)mcontentView.findViewById(R.id.questionnaire_answer_radioButton4); holder.nextBtn=(Button)mcontentView.findViewById(R.id.questionnaire_item_nest_btn); mcontentView.setTag(holder); }else { holder=(Holder)mcontentView.getTag(); } holder.title.setText(mData.get(mposition).get("title").toString()); try { sore=new int[4]; JSONArray jsonArray=new JSONArray(mData.get(mposition).get("answers").toString()); //Log.e("111111", "jsonArray.length()---:"+jsonArray.length()); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject=new JSONObject(jsonArray.get(i).toString()); holder.radiobuttons[i].setText(jsonObject.get("answer").toString()); sore[i]=(int)Integer.valueOf(jsonObject.get("sore").toString()); } holder.nextBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stub if (mposition<mData.size()-1) { for (int i = 0; i < 4; i++) { if (holder.radiobuttons[i].isChecked()) { sum+=sore[i]; } } mposition++; Log.e("", "mposition:"+mposition); QuestionnaireActivity.adapter.getView(mposition, mcontentView, parent); QuestionnaireActivity.adapter.notifyDataSetChanged(); }else { holder.nextBtn.setText(sum+"分"); } } }); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return mcontentView; } private final class Holder{ TextView title; private RadioButton[] radiobuttons; private Button nextBtn; } }
相关文章推荐
- Android listview&gridview getview 方法多次调用问题解决方法--->导致gridview错位
- Android listview&gridview getview 方法多次调用问题解决方法
- Android listview&gridview getview 方法多次调用问题解决方法
- Android 解决ListView、GridView在首次显示时adapter可能多次调用getView的问题
- 彻底解决listview,gridview的getview多次调用问题
- 彻底解决listview,gridview的getview多次调用问题
- android listview 连续调用 getview多次问题分析及解决
- 彻底解决listview,gridview的getview多次调用问题
- Android自定义ListView或GridView适配器Adapter的getView方法不执行的问题
- 解决listview,gridview的getview多次调用问题
- android-继承BaseAdapter--自定义适配器,getView执行多次的解决方法
- 【Android】ListView中getView的原理与解决多轮重复调用的方法
- 技术转载:android listview 连续调用 getview问题分析及解决
- android listview 连续调用 getview问题分析及解决(转)
- android——listview gridview getview调用多次
- 在CHtmlView中,判断一个页面加载完成的准确方法,解决OnDocumentComplete多次调用问题
- android ListView 多次调用 getView方法
- Android ListView的适配器 Adapter 中GetView方法调用次数大于数据条数的问题
- [转]android listview 连续调用 getview问题分析及解决。
- android中ListView多次刷新重复执行getView的解决方法