Fragment中关于Simpleadapter的 无指针问题 nullpoint 以及runnable问题

本文探讨了在Fragment中使用SimpleAdapter时遇到的NullPointerException问题,特别是当主线程比子线程快导致Adapter未准备好时,应用可能崩溃。通过在onActivityCreated中使用thread.join()确保线程同步,解决了这个问题。同时,作者对于getView()和getActivity().findViewById()的区别感到困惑,并寻求高手解答。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.example.fragceshi;

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

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView.FindListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class Frag01 extends Fragment {
//private List<String> list=null;
private ListView lv=null;
private ListView lv2=null;
private View lview=null;
List<HashMap<String, String>> list=new ArrayList<HashMap<String, String>>();
private SimpleAdapter simpleAdapter;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            System.out.println("-------------------------onCreateView---------------");

        return inflater.inflate(R.layout.activity_frag01, container, false);

    }



    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        System.out.println("------onActivityCreated----------->"); 
        super.onActivityCreated(savedInstanceState);
        lv=(ListView)this.getView().findViewById(R.id.listView1);
        lv2=(ListView)this.getActivity().findViewById(R.id.listView1);
        System.out.println("------onActivityCreated----------->"+lv); 
        System.out.println("------onActivityCreated----------->"+lv2); 
        Thread thread = new Thread(myrunnable);
        thread.start();
        try {
            thread.join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        /*HashMap<String, String> map = new HashMap<String, String>();
        map.put("dir_name"," 12121");
        list.add(map);
         System.out.println("-------simpleAdapter--start----------->");
        simpleAdapter=new SimpleAdapter(getActivity(),list,R.layout.dir_item,new String[]{"dir_name"},new int[]{R.id.dir_name});
        System.out.println("---------0.0------------------->"+simpleAdapter);

        lv.setAdapter(simpleAdapter);

        System.out.println("-------runnable--end----------->");
        System.out.println(list);
        System.out.println("-------runnable--end----------->");*/


    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        System.out.println("onCreate------------------------>");
}

Runnable myrunnable=new   Runnable(){

    public  void run(){
            System.out.println("-------runnable--start----------->");

            HashMap<String, String> map = new HashMap<String, String>();
            map.put("dir_name"," 12121");
            list.add(map);
             System.out.println("-------simpleAdapter--start----------->");
            simpleAdapter=new SimpleAdapter(getActivity(),list,R.layout.dir_item,new String[]{"dir_name"},new int[]{R.id.dir_name});
            System.out.println("---------0.0------------------->"+simpleAdapter);
            lv.setAdapter(simpleAdapter);

            System.out.println("-------runnable--end----------->");
            System.out.println(list);
            System.out.println("-------runnable--end----------->");

        }




};


}

上面是一个fragment,我在onactivitycreate方法中加入了thread.join();,让整个线程读完 再运行主线程,不然就会出现nullpoint的问题,我这个新手考虑了一天才想到一般主线程运行较快,子线程还没完事adapter没完事 fragment打开出错,app会强行退出。



如果我说的哪里不对请高手赐教!谢谢,我还没搞明白getview()和getactivity的区别,比如View view=(ListView)getView.findViewById(R.id.content_name);
View view=(ListView)getactivity.findViewById(R.id.content_name);
求大神赐教



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值