getview-android Fragment 使用adapter时getView 方法不执行,在Activity下可以执行

问题描述

android Fragment 使用adapter时getView 方法不执行,在Activity下可以执行

在网上也看了很多相关文章了,还是没有解决,在Activity下使用此代码没有任何问题,数据可以显示,但是用了Fragment adapter的getView方法就一直不执行。
我觉得他们之间唯一的区别的就是context 和view 的不同,请大神指教

代码如下

public class BookSearchActivity extends Fragment {

private BookSearchService service;
private List<Books> list;
private String result;
private BookSearchAdapter adapter;
private Handler mHandler;
private ListView listView;
private View v ;
private Context context;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    context= getActivity();
     v = inflater.inflate(R.layout.booksearch, container, false);
    return inflater.inflate(R.layout.booksearch, container, false);
}  

 @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mHandler = new Handler();
        new Thread(new Runnable() {
            @Override
            public void run() {
                service = new BookSearchService();

                list = service.queryBookList("", ""); 

                if (list == null)
                    result = ApplConst.FAILURE;
                else
                    result = ApplConst.SUCCESS;

                adapter = new BookSearchAdapter(list,context);
                mHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        listView = ((ListView) v.findViewById(R.id.books_list_view));
                        listView.setAdapter(adapter);
                        listView.setDividerHeight(1); // 不显示分割线
                        listView.setCacheColorHint(Color.TRANSPARENT); //防止listview背景变黑
                        listView.setOnItemClickListener(new OnItemClickListener() {
                            public void onItemClick(AdapterView<?> parent,
                                    View view, int position, long id) {
                                Intent newActivity = new Intent(view.getContext(),
                                        BookSearchActivity.class);
                                Books book = (Books) listView.getItemAtPosition(position);
                                newActivity.putExtra("BookId",
                                        book.getId());
                                newActivity.putExtra("categoryId",
                                        book.getCategoryId());
                                startActivity(newActivity);
                            }
                        });
                    }

                });

            }
        }).start();

    }

}

///////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
Adapter

public class BookSearchAdapter extends BaseAdapter {

private int resourceId;
private List<Books> booksList;
private Map<Integer, View> rowViews = new HashMap<Integer, View>();
private Context context = null;

public BookSearchAdapter(List<Books> objects, Context context) {
    booksList = objects;
    this.context = context;

}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View rowView = rowViews.get(position);
    if (rowView == null) {
        SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
        LayoutInflater layoutInflater = LayoutInflater.from(context);
        rowView = layoutInflater.inflate(R.layout.booksearch_items,
                null);
        TextView publicationDate = (TextView) rowView
                .findViewById(R.id.dtPublicationDate);
        TextView bookName = (TextView) rowView
                .findViewById(R.id.txtBookName);
        TextView publish = (TextView) rowView
                .findViewById(R.id.TxtPublish);

        TextView writor = (TextView) rowView
                .findViewById(R.id.txtWritor);

        Books books = booksList.get(position);
        if (books.publicationDate != null)
            publicationDate.setText("出版时间:"
                    + DateUtil.parseDateToString(
                            books.getPublicationDate(), df));
        if(books.getBookName()!=null)
            bookName.setText(books.getBookName());
        if(books.getWritor()!=null)
            writor.setText("编者:"+books.getWritor());
        if(books.getBookName()!=null)
            publish.setText("出版社:"+books.getPublish());

        rowViews.put(position, rowView);
    }

    return rowView;
}

解决方案

你的问题解决了么,我也遇到了同样的问题

时间: 2024-10-07 10:42:14

getview-android Fragment 使用adapter时getView 方法不执行,在Activity下可以执行的相关文章

Android: Gallery的adapter中getView方法被执行多次

项目中遇到一个奇怪的问题:为Gallery设置的adapter中的getView方法被调用多次 客户需求:一次只能滑动一格 参考资料: http://stackoverflow.com/questions/4687370/gallery-scroll-one-image-at-a-time http://stackoverflow.com/questions/6058609/android-gallerys-getview-returning-incorrect-position Android

代码-android fragment重叠问题

问题描述 android fragment重叠问题 我的导入的是 import android.app.FragmentManager; import android.app.FragmentTransaction; 这俩个包,因为我导入v4包getSupportFragmentManager出不来,所以我用的是app包, FragmentManager fm=getFragmentManager(); FragmentTransaction ft=fm.beginTransaction();

fragment 二维码-android fragment 集成扫描二维码功能

问题描述 android fragment 集成扫描二维码功能 我在一个activity里放了一个viewpager,viewpager里填充两个fragment, 其中一个fragment是扫描二维码的功能,扫描完以后会跳到另外一个页面,请做过的人提供一点思路,感谢! 解决方案 你用ZXing这个第三方的扫描sdk就可以了 解决方案二: ZXing识别出url,传值给另一个页面,页面中用webview显示. 解决方案三: http://download.csdn.net/detail/zhuo

getview方法不执行- android listview自定义adapter,getview方法不显示

问题描述 android listview自定义adapter,getview方法不显示 adapter的getCount值不为0,但是不执行getview方法,在ErrorLog中打印出来的log在下面贴出来了,希望路过的大牛们帮忙看看 解决方案 问题找到了,是我的listView的布局控件不正确,已经改好了 解决方案二: android listView 重写Adapter方法getView的性能优化问题 解决方案三: 空指针异常,找找在哪个位置. 解决方案四: log和问的错没什么关系 解

android Fragment中嵌入ListView ,更新数据后,getview()没被调用

问题描述 android Fragment中嵌入ListView ,更新数据后,getview()没被调用 我是在vieapage里面嵌套listview的.viewpager是用fragment写的.listview是简单Adapter写的 解决方案 你刷新时怎么写的,如果制定了adapter,调用adapter的notifyDataSetChanged就可以了,除非你的数据源中没有数据 解决方案二: 先看listview是否绑定了adapter,然后看是否调用了notifyDataSetCh

Android中Fragment多层嵌套时onActivityResult无法正确回调问题的解决方法_Android

前言: Fragment也可以使用startActivityForResult方法去打开一个Activity,然后在其onActivityResult方法中处理结果,可是当Fragment嵌套的时候,由于FragmentActivity的BUG导致只会回调最外那层Fragment的onActivityResult方法,于是乎当前Fragment就收不到结果了. BUG分析: 解决这个问题之前我们先通过源码分析一下是什么原因导致的,以22.2.1版本的support-v4库为例 我们先从Fragm

Android ListView适配器(Adapter)优化方法详解

Android ListView的优化,在做Android项目的时候,在用到ListView 界面及数据显示,这个时候如果资源过大,对项目来说,用户体验肯定是不好的,这里就对如何优化做了详细介绍: Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View.想过没有? 在我们的列表有1000000项时会是什么样的?是不是会占用极大的系统资源? ListView的Adapter的作用如下图所示: 先看看下面

Android Fragment多层嵌套重影问题的解决方法_Android

1解决bug的思想: //step1:当bug被发现(排除极低偶然性,单次性,开发工具导致) //step2:根据经验判断bug的重现场景,多次测试,直到精准的定位bug //step3:根据重现场景找到对应的代码 //step4:分析区域代码是否会影响到其他功能. //step5:做好数据的备份工作.(做好代码重构和恢复的准备,这样你才能肆无忌惮的捣鼓代码) //step6:修复代码的过程中,你会发现可能有多种解决方案.试着采取不影响主线的解决方案.以免影响到其他的代码. //step7:回顾

Android Fragment中使用SurfaceView切换时闪一下黑屏的解决办法_Android

重构了下之前自己的一个新闻客户端,全部使用了Fragment来进行页面切换,只有一个入口Activity作为程序的启动Activity,其中有一个界面需要调用摄像头识别二维码,于是就会用到SurfaceView进行预览,那么问题来了,当切换到对应的Fragment时,屏幕会黑一下,黑了1秒左右就显示出正常的界面,而且这种现象只有第一次进入该Fragment才会出现,之后进入都不会出现,解决方法是无意在github上看到了,试了一下,可以行的通,下面贴出解决方法. 方法一.在Activity的on