2016-09-01 14 views
1

私はアンドロイドアプリケーションで作業しています。私はあるアクティビティの断片の中にいくつかのビューをロードしています。 First Fragmentはこの中にGridview/ListViewを持っています。私は、アクティビティを再起動することなく、リストビュー/グリッドビューのいずれかのアイテムがクリックされたときに、同じアクティビティで別のフラグメントをロードします。GridViewの表示アイテムがクリックされたときに、同じアクティビティで別のフラグメントをロードする方法

どうすればいいですか、誰かが私を助けてくれますか?

ありがとうございました。

+0

'callback'メソッドを使ってみましたか?私は 'コールバック'が正しい方法だと思います。 –

+0

ここに例を載せてください、それは大きな助けになるでしょうか?ありがとう –

答えて

0

ここ例です。正確な答えではなく、ちょうどヒントのためです。

断片クラスは、このようになりますことがあります

public class FragmentA extends ListFragment { 
    OnArticleSelectedListener mListener; 

    // Container Activity must implement this interface 
    public interface OnArticleSelectedListener { 
     public void onArticleSelected(int position); 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     try { 
      mListener = (OnArticleSelectedListener) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener"); 
     } 
    } 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     // Append the clicked item's row ID with the content provider Uri 
     Uri noteUri = ContentUris.withAppendedId(ArticleColumns.CONTENT_URI, id); 
     // Send the event and Uri to the host activity 
     mListener.onArticleSelected(position); 
    } 

} 

とアクティビティクラスは、以下のようになります:

public static class DetailsActivity extends Activity implements FragmentA.OnArticleSelectedListener{ 

    @Override 
    public void onArticleSelected(int position){ 
     // your implementation ... 
    } 
} 
+0

このアイデアのためにあまりにもありがとう、それは私のために働いた。どうもありがとう。私は、最初のフラグメントを置き換えることによって、同じアクティビティでsendフラグメントをロードするGridviewアイテムをクリックするともう1つ問題がありますが、最初のフラグメントがそこに表示されるはずです。 –

+0

まず、最初のフラグメントを 'addToBackStack'によってスタックに入れなければなりません。スタックされたフラグメントをポップするには、 'getFragmentManager()。popBackStack();'を使用します。詳細はhttp://stackoverflow.com/questions/10863572/programmatically-go-back-to-the-previous-バックスタンドでの断片化、またはhttp://stackoverflow.com/questions/25350397/android-return-to-previous-fragment-on-back-press –

0

フラグメントコード:

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, final View view, final int position, long id) { 



         YourFragment yf= new YourFragment(); 



         ((HomeActivity) mActivity).replceFrament(groupControlFragment); 




     } 
    }); 

MainActivityコード:

公共ボイドreplceFrament(フラグメント断片){

FragmentManager fragmentManager = getSupportFragmentManager(); 
fragmentManager.beginTransaction().replace(R.id.frame_container, fragment,tag).addToBackStack("back").commit(); 

} 
0

リストビュー/ GridViewのを持ってあなたのフラグメント内部。

Fragment[] fragment=new Fragment{new MyFragment1(), new MyFragment2(), new MyFragment3()}; 

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

     View view=inflater.inflate(R.layout.mylayout, container, false); 
     ListView listView=(ListView)view.findViewById(R.id.list_id); 

     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
        replaceFragment(fragment[i]); 
       } 
      }); 
     return view; 
} 

public void replaceFragment(Fragment fragment){ 
     FragmentManager fragmentManager=getFragmentManager(); 
     FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction(); 
     fragmentTransaction.replace(R.id.containerLayout,fragment); 
     fragmentTransaction.addToBackStack(null);   //Optional 
     fragmentTransaction.commit(); 
} 
関連する問題