2016-12-07 13 views
0

現在、私はfragment_one.xmlに5 CardViewsを持っており、各カードには別のXMLページ(Lesson_One、Lesson_Twoなど)に行くボタンがあります。 )が、OneFragment.javaにあるコードでは、両方のボタンが開いていますLesson_TwoボタンはすべてAndroidのフラグメントから同じアクティビティを開きます

どのように修正できますか?ここでは、効果的に第二の最初の意図を上書きし、二回intentを代入している

FragmentOne.java

public class OneFragment extends Fragment{ 
    Intent intent; 

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

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View root = inflater.inflate(R.layout.fragment_one, container, false); 
    intent = new Intent(getActivity(), LessonOne.class); 
    final Button button = (Button) root.findViewById(R.id.button1); 

    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      startActivity(intent); 
     } 
    }); 

    intent = new Intent(getActivity(), LessonTwo.class); 
    final Button button2 = (Button) root.findViewById(R.id.button2); 

    button2.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      startActivity(intent); 
     } 
    }); 
    return root; 
    } 

} 

答えて

3

私のコードです。

したがって、どのクリックイベントがトリガーされても、開始されるアクティビティはLessonTwo.classです。

簡単な修正は、クリックハンドラが開始された。これは、それが明示的になり

public class OneFragment extends Fragment{ 


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

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View root = inflater.inflate(R.layout.fragment_one, container, false); 
    final Button button = (Button) root.findViewById(R.id.button1); 

    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      startActivity(new Intent(getActivity(), LessonOne.class)); 
     } 
    }); 

    final Button button2 = (Button) root.findViewById(R.id.button2); 

    button2.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      startActivity(new Intent(getActivity(), LessonTwo.class);); 
     } 
    }); 

    return root; 
    } 

} 

のようにクリックハンドラ内のインテントを作成するにはどうなるか活動

+0

パーフェクト!ありがとう、私はそれを感謝の束! –

1

代替答え - クラス自体にクリックリスナを実装。

これにより、onCreateViewメソッドがクリーンアップされます。リスナーを設定するためにボタンを「キャプチャ」する必要もありません。

public class OneFragment extends Fragment implements View.OnClickListener { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
     View root = inflater.inflate(R.layout.fragment_one, container, false); 

     root.findViewById(R.id.button1).setOnClickListener(this); 
     root.findViewById(R.id.button2).setOnClickListener(this); 

     return root; 
    } 

    @Override 
    public void onClick(View v) { 
     Class clz = null; 
     switch (v.getId()) { 
      case R.id.button1: 
       clz = LessonOne.class; 
      case R.id.button2; 
       clz = LessonTwo.class; 
     } 

     if (clz != null) startActivity(new Intent(getActivity(), clz)); 

    } 

} 
関連する問題