android fragmenty

0

Piszę aplikacje z wykorzystaniem fragmentów. Mam główne okienko a na nim listview, pod listview 3 buttony. Po kliknięciu w element listview zamieniam fragment na nowy. W nowym oknie mam kilka EditText i buttony, i tu dziwna sytuacja gdy kliknę w wolny obszar ale na wysokości i położeniu butona z poprzedniego okna to wywołuje mi się jego zdarzenie onClick. Czy coś źle robię ? Da się to jakoś ominąć ? Poniżej kod kiedy zmieniam fragment:

FragmentTransaction transaction;
transaction= getFragmentManager().beginTransaction();
transaction.replace(((ViewGroup)getView().getParent()).getId(), fragEdit);
transaction.addToBackStack(null);
transaction.commit();
0

Pokaż więcej kodu, może być kilka możliwości.

0

Poniżej kawałek kodu fragmentu rodzica (1 okna)

    public void onActivityCreated(Bundle savedInstanceState) { 
        super.onActivityCreated(savedInstanceState); 
        listReceiptPosition=getListView();
        fragEdit=new ReceiptEdit();
        alert = new DialogYesNo(Constans.ctx);
        txtKey=(EditText)getActivity().findViewById(R.id.txtKey);
        mListaRow = new ReceiptSimpleAdapter(Constans.ctx, Constans.my_receipt, R.layout.bill_row,
			     new String[] {"image","name", "count", "price_unit", "price"}, new int[] {R.id.bill_image_status, R.id.bill_article_name, R.id.bill_article_count, R.id.bill_article_price, R.id.bill_article_sum_price});   //wypełniamy liste
				 listReceiptPosition.setAdapter( mListaRow );
				 ((ReceiptSimpleAdapter)listReceiptPosition.getAdapter()).notifyDataSetChanged();
				 listReceiptPosition.requestFocusFromTouch();
				 if(Constans.receiptPosition<Constans.my_receipt.size()&&Constans.receiptPosition>=0)
					 listReceiptPosition.setSelection( Constans.receiptPosition );
				 Constans.id_position=Constans.receiptPosition;
				 
        listReceiptPosition.setOnItemClickListener(new OnItemClickListener()
	   		{
	    	   public void onItemClick(AdapterView<?> arg0, View arg1, int item, long arg3) 
	    	   {
	    		   positionBill=item;
	    		   listReceiptPosition.requestFocusFromTouch();
	    		   Constans.id_position=item;
	    		   positionIsSelected=true;
	    		   Constans.receiptPosition=item;
	    		   FragmentTransaction transaction = getFragmentManager().beginTransaction();
	    		   transaction.replace(R.id.receipt_content, fragEdit);
	               transaction.commit();
	       	 }

Reszta to obsługa zdarzeń klawiatury.

I poniżej kod drugiego okna w którym gdy kliknę na pusty obszar na wysokości buttonu z rodzica wywołuje się jego onClick

  @Override 
	    public void onActivityCreated(Bundle savedInstanceState) { 
	        super.onActivityCreated(savedInstanceState); 
	        txtKey=(EditText)getActivity().findViewById(R.id.txtKey);          
	        listBillEdit = getListView();
	        ReceiptSimpleAdapter mListaRow = new ReceiptSimpleAdapter(Constans.ctx, Constans.my_receipt, R.layout.bill_row,
		            new String[] {"image","name", "count", "price_unit", "price"}, new int[] {R.id.bill_image_status, R.id.bill_article_name, R.id.bill_article_count, R.id.bill_article_price, R.id.bill_article_sum_price});   //wypełniłniamy liste
			listBillEdit.setAdapter( mListaRow );
			listBillEdit.setSelection(Constans.id_position);
		//	txtCountEdit.setText(Constans.my_bills.g)
			listBillEdit.requestFocusFromTouch();
			txtCountEdit=(TextView)getActivity().findViewById(R.id.txtCountEdit);
			txtPriceEdit=(TextView)getActivity().findViewById(R.id.txtPriceEdit);
			txtDiscountEdit=(TextView)getActivity().findViewById(R.id.txtDiscountEdit);
			Map<String, String> map = new HashMap<String, String>();
		    map=Constans.my_receipt.get(Constans.id_position);
		    txtCountEdit.setText(map.get("count"));
		    txtPriceEdit.setText(map.get("price"));
		    txtDiscountEdit.setText("0%");
		 	txtKey.requestFocus();
			txtKey.setFocusable(true);
   		   	listBillEdit.setSelection(Constans.id_position);
	       
	    }  
0

I poniżej kod drugiego okna w którym gdy kliknę na pusty obszar na wysokości buttonu z rodzica wywołuje się jego onClick

Widocznie nakładasz fragment na zawartość już stworzonego okna. Layout fragmentu prawdopodobnie przykrywa buttony które wciąż tam są. Być może używasz też Frame Layout jako containera.

0

Ale opcja replace transakcji powinna mi podmienić nowy layout ze starym. Starego nie powinno już być.

0

Jak byś wstawił kod, a nie jakiś ochłap (w dodatku niesformatowany, poczytaj o automatycznym formatowaniu kodu w eclipe i android studio w zależności z czego korzystasz) to już by nie było problemu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1