2016-06-27 12 views
1

アクティビティのリストビューがボタンが機能するとき、クラスがフラグメントを拡張している限り何も起こりません。リストビュー内のボタンのクリックリスナがフラグメントを拡張しています

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のボタンリスタを入れた場合、それは私がFragment.Any提案でbutton'clickリスナーが理解されるであろう欲しい、too.Butを呼び出すことができます。

+1

を行う必要がありますhttp://stackoverflow.com/a/37535113/5381331 –

+2

どうもありがとうございました、ありがとう、ありがとう!それは私のために非常に役立ちます! – Plantago

答えて

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

フラグメントがリスナーを実装していて、アクティビティを実装していません。だから、あなたは、フラグメントとアダプタとの間のインターフェイスを作成する必要があります

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

申し訳ありませんが、私はFragment.Anywayを拡張する私のクラスでgetActivity()を変更することはできません、同じように感謝します。 – Plantago

+0

リスナーを実装しているオブジェクトを渡す必要があります。あなたのコードを作成すると、OnlineNopaymentInsuranceFragmentがリスナーを実装していることがわかります。そのインスタンスを渡す。ホストアクティビティは、リスナを実装するアクティビティではありません。 – user3215142

関連する問題