Listiview中的Button点击监听器无法正常工作,扩展了Fragment

时间:2016-06-27 02:55:19

标签: android android-fragments onclicklistener listadapter

当Activity中的listview,按钮工作时,只要我的类扩展Fragment,就没有任何事情发生。

public class OnlineNopaymentInsuranceFragment extends Fragment implements OnItemClickListener,OnItemSelectedListener,OnListViewListener,OnClickListener {

    private ScrollListView MainView;
    private BasicAdapter Adapter;
    private Integer Step=3;
    private Integer Start=0;
    private Integer End=Step;
    private Handler handler,handler2;
    //private List<Map<String, Object>> Lists;
    private DataTable Table;

    public static String SelectCode="";

    private static final int OVER = 1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_online_insurance,container,false);
    }
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
                this.MainView=(ScrollListView)getView().findViewById(R.id.contractlistView1);

                this.MainView.setOnItemClickListener(this);
                this.MainView.setOnItemSelectedListener(this);
                this.MainView.setPullLoadEnable(true);
                this.MainView.setXListViewListener(this);


                handler2 = new Handler();

                Control.StartDialog(getActivity());
                new Thread(new Runnable() {
                    public void run() {
                        Looper.prepare();
                        handler2.post(runSetList);
                        handler1.sendEmptyMessage(1);
                        Looper.loop();
                    }
                }).start();



                this.MainView.setOnItemClickListener(new OnItemClickListener() {  
                       @Override  
                        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                               long arg3) {  

                           Toast.makeText(getActivity(), "nothing", Toast.LENGTH_LONG).show();  
                       }  
                   });  

    }



    private void SetList(){
        Start=0;
        End=3;
        this.Table = new DataTable(getActivity(),"newcontracta");
        this.Table.Load("AgentCode="+OnlineNopaymentInsuranceFragment.SelectCode+"&Start=0&End="+Step);
        if(Table.GetRowCount()>0){
            this.MainView.setVisibility(0);
            this.StartData(this.Table.GetList(),R.layout.userlistitem3);    

        }else{
            this.MainView.setVisibility(8);
            TextView NullView=(TextView) getView().findViewById(R.id.listViewNull1);
            NullView.setVisibility(0);
            NullView.setHeight(50);
        }
    } 


    private void StartData(ArrayList<Map<String, Object>> List, int Resource) {
        this.Adapter = new BasicAdapter(getActivity(), List, Resource,
                new String[] { "Provider", "ProdName", "NoType", "ContractNo",
                        "AcceptTime", "ContractStatus", "Premium", "Gain",
                        "ReceivedPremium", "Name" }, 
                new int[] {R.id.contractitem_label_Provider,
                        R.id.contractitem_label_ProdName,
                        R.id.contract_label_cno,
                        R.id.contractitem_label_contractNo,
                        R.id.contractitem_label_acceptTime,
                        R.id.contractitem_label_contractStatus,
                        R.id.contractitem_label_premium,
                        R.id.contractitem_label_feilv,
                        R.id.contractitem_label_receivedPremium,
                        R.id.contractitem_label_Name }, 
                new int[] {R.id.listitem_button_look, R.id.listitem_button_pay,R.id.listitem_main1 });


        handler = new Handler();
        this.Adapter.Start(this.MainView);
        this.Start += Step;
        this.End += Step;
    }


    private void LoadData(){
        this.Table.Load("AgentCode="+OnlineNopaymentInsuranceFragment.SelectCode+"&Start="+Start+"&End="+End);
        this.Start += Step;
        this.End += Step;
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.listitem_button_pay:
                LogUtil.e("OnlineNopaymentInsuranceFragment", "nothing happen in here");
                Toast.makeText(getActivity(),"nothing happen in here", Toast.LENGTH_SHORT).show();

        break;
            case R.id.listitem_main1:
                Toast.makeText(getActivity(),"nothing happen in here,too", Toast.LENGTH_SHORT).show();
                break;

        default:
            break;
        }
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int Index, long id) {}

    @Override
    public void onNothingSelected(AdapterView<?> parent) {}

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int Index, long id) {}


    private void stopRefresh() {
        this.MainView.stopRefresh();
        this.MainView.setRefreshTime("刚刚");
    }

    private void stopLoadMore() {
        this.MainView.stopLoadMore();
    }


    @Override
    public void onRefresh() {
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                SetList();
                stopRefresh();
            }
        }, 2000);
    }

    @Override
    public void onLoadMore() {
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                LoadData();
                stopLoadMore();
            }
        }, 2000);
    }


    @SuppressLint("HandlerLeak")
    Handler handler1 = new Handler() {
        public void handleMessage(Message msg) {
                switch (msg.what) {
                case OVER:
                    Control.ExitDialog();
                        break;
                default:
                        break;
                }
                super.handleMessage(msg);
        }
    };

    Runnable runSetList = new Runnable() {

        @Override
        public void run() {
            SetList();

        }
    };
}

适配器代码:

public class BasicAdapter extends SimpleAdapter {

    private Context context;
    private ArrayList<Integer> Indexs;

    public BasicAdapter(Context context,List<? extends Map<String,?>> data,int resource,String[] from,int[] to){
        super(context,data,resource,from,to);
        this.context=context;
        this.Indexs =new ArrayList<Integer>();
    }

    public BasicAdapter(Context context,List<? extends Map<String,?>> data,int resource,String[] from,int[] to,int[] Ids){
        super(context,data,resource,from,to);
        this.context=context;
        this.Indexs =new ArrayList<Integer>();
        if (Ids != null) {
            for (int i = 0; i < Ids.length; i++) {
                this.Indexs.add(Ids[i]);
            }
        }
    }

    public void Add(Integer ViewId){this.Indexs.add(ViewId);}

    @Override
    public View getView(int position,View convertView,ViewGroup parent){
        LogUtil.e("===basicadapter", "getview");
        View view = super.getView(position, convertView, parent);
        for(int i=0;i<this.Indexs.size();i++){
            View TempView=(View) view.findViewById(this.Indexs.get(i));
            TempView.setOnClickListener((OnClickListener) this.context);
            TempView.setTag(position);
        }
        return view;
    }

    public void Start(ListView View){
        View.setAdapter(this);
        this.setViewBinder(new ViewBinder() {  
            @Override
            public boolean setViewValue(View view,Object data,String textRepresentation) {    
                if(view instanceof TextView && data instanceof HkBoolean){
                    HkBoolean Data = (HkBoolean) data;
                    view.setVisibility(Data.GetVisibility());
                    return true;
                }else if(view instanceof ImageView && data instanceof Bitmap){    
                    ImageView iv = (ImageView) view;    
                    iv.setImageBitmap((Bitmap) data);    
                    return true;    
                }else if(view instanceof ImageView && data instanceof Integer){    
                    ImageView iv = (ImageView) view;    
                    iv.setBackgroundResource((Integer) data);    
                    return true;    
                }else {
                    return false;
                }
            }    
        });
    }

}

如果我将按钮列表器放在BasicAdapter中,它也可以调用。但是我想要片段中的按钮'单击监听器。任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

this.Adapter = new BasicAdapter(getActivity(), List, Resource,
            new String[] { "Provider", "ProdName", "NoType", "ContractNo",
                    "AcceptTime", "ContractStatus", "Premium", "Gain",
                    "ReceivedPremium", "Name" }, 

Fragment正在实现侦听器而不是活动。所以你应该做

this.Adapter = new BasicAdapter(this, List, Resource,
            new String[] { "Provider", "ProdName", "NoType", "ContractNo",
                    "AcceptTime", "ContractStatus", "Premium", "Gain",
                    "ReceivedPremium", "Name" },