2016-09-15 21 views
1

私にはフラグメントがあるアクティビティAがあります。アクティビティAにユーザ入力に基づいて双方でフラグメントアクティビティのonclickイベントは機能しません

を(アクティビティAが呼び出されるデフォルト)またはその断片Bを断片化するために、この活性フラグメント変化を

私はクリックリスナー上でのボタンを有する& Bを断片。 このボタンは、アクティビティAが開始されたときに初めて動作します。

ユーザーがフラグメントを変更すると、そのフラグメント内のボタンがクリック時に反応しなくなります。

フラグメントABでボタンを作成するには、ユーザーによってフラグメントが変更されたときに行う必要があることをお勧めします。

私は、このコードによって、ユーザの入力に基づいて、断片を交換しています:

fr = new FragmentOneDice(); 
FragmentManager fm = getFragmentManager(); 
FragmentTransaction fragmentTransaction = fm.beginTransaction(); 
fragmentTransaction.replace(R.id.fragment_place, fr); 
fragmentTransaction.commit(); 

フラグメント・アクティビティ・コードでは、クリックリスナーボタン上のため、このようなものです。あなたは一つのことを覚えて

import android.app.Fragment; 
import android.app.FragmentManager; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.os.Build; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.ImageView; 

import java.util.ArrayList; 
import java.util.Collections; 

public class FragmentOneDice extends Fragment implements View.OnClickListener { 

    Button button1; 
    View view; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     //Inflate the layout for this fragment 


     view = inflater.inflate(R.layout.activity_fragment_one, container, false); 


     button1 = (Button) view.findViewById(R.id.button_one); 
     button1.setOnClickListener(this); 

     return view; 


    } 

    @Override 
    public void onClick(View v) { 
     //MY CODE HERE 
} 
+0

'this'は有効なOnClickListenerではなく、フラグメント内のonClickメソッドはフラグメント自体のonclickです。@Override パブリックボイドonClick(ビューv){/ *あなたのコード* /}}); ' – x13

+0

なぜ、そのbutton1.setOnClickListener(this);を 'Button1.setOnClickListener(new View.OnClickListener()有効ではありません、説明してください。なぜなら、私が質問したように、onClickは、アクティビティAが初めて作成され、ユーザーがフラグメントを変更しようとしていないときに機能するからです。 onClickは、ユーザーがフラグメントを変更したときに動作を停止します。 –

+0

@ThisNameBetterBeAvailableという点で、FragmentOneDiceはonClick()をオーバーライドしてView.OnCLickListenerを実装しています。したがって、有効なView.OnClickListenerです。 – 0X0nosugar

答えて

1

私のactivity_main.XMLに問題がありました。ここでは、すべてのフラグメントのプレースホルダーとして<Fragment>を定義し、デフォルトで1つのフラグメントを設定していました。だから、他のフラグメントがロードされたときにボタンのクリックイベントが重なってしまったため、<Fragment>をプレースホルダーとして<FrameLayout>に変更しました。そして私の問題は解決しました。

0

まず、直接交換を断片化するために、直接取引、又はその断片を断片化する
フラグメントはできません。アクティビティだけをスローすることは可能です。

最初のフラグメントにインターフェイスを定義し、そのインターフェイスを実装するためにコンテナアクティビティを作成します。その結果、フラグメントからアクティビティへデータを送信できます。もう1つでは、2番目のフラグメントを作成し、 2番目のフラグメントを定義するFirst Fragmentインタフェースの実装されたメソッド内のコンテンツアクティビティでは、ここで2番目のFragment throughインタフェースにデータを割り当てます。

+0

私はJavaとAndroidにはとても新しいので、私はあなたの答えから何かを理解していませんでした。 。いくつかの例を挙げて説明してください。 –

+0

k、確かに。私はすぐに私の答えを投稿します – ballu

関連する問題