2013-11-24 118 views
11

我有一个项目,我正在尝试。我遇到了一个小问题,我不确定如何绕过它。以下是目前应用程序的图像。如何在onclick之间切换片段?

我想要做的是当用户点击其中一个列表项时,说“你好!它是Fragment2”的部分变成了我在应用程序中声明的新xml。所以,如果我点击ATO的listItem,然后在右侧的片段应更改为类似“你好!这是ATO片段”

enter image description here

这是到目前为止我的代码:

AndroidListFragmentActivity:

package com.exercise.AndroidListFragment; 

import android.app.Activity; 
import android.os.Bundle; 

public class AndroidListFragmentActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 
} 

Fragment2:

package com.exercise.AndroidListFragment; 

import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class Fragment2 extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     return inflater.inflate(R.layout.fragment2, container, false); 
    } 

} 

MyListFragment1:

package com.exercise.AndroidListFragment; 

import android.app.ListFragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

public class MyListFragment1 extends ListFragment { 

    String[] options ={ 
      "ATO", 
      "BETA", 
      "DELT", 
      "PHI DELT", 
      "SAE", 
      "SIG NU", 
      "FIJI", 
      "SIG CHI", 
      "PHI PSI" 
    }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ListAdapter myListAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, options); 
     setListAdapter(myListAdapter); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.listfragment1, container, false); 
    } 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     // TODO Auto-generated method stub 
     Toast.makeText(getActivity(), getListView().getItemAtPosition(position).toString(), Toast.LENGTH_LONG).show(); 
    } 
} 

Fragment2.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/fragment2text" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Hello! It's Fragment2" /> 
</LinearLayout> 

listfragment1.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:paddingLeft="8dp" 
     android:paddingRight="8dp"> 

    <ListView android:id="@id/android:list" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_weight="1" 
       android:drawSelectorOnTop="false"/> 

    <TextView android:id="@id/android:empty" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:text="No data"/> 
</LinearLayout> 

main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" > 

    <fragment 
     android:name="com.exercise.AndroidListFragment.MyListFragment1" 
     android:id="@+id/fragment1" 
     android:layout_weight="1" 
     android:layout_width="0px" 
     android:layout_height="match_parent" /> 
    <fragment 
     android:name="com.exercise.AndroidListFragment.Fragment2" 
     android:id="@+id/fragment2" 
     android:layout_weight="2" 
     android:layout_width="0px" 
     android:layout_height="match_parent" /> 

</LinearLayout> 

回答

13

不知道什么是最小的修复,让您的代码工作,但有你看着用Navigation Drawer来切换片段?在我看来,像官方文档中的例子几乎完全匹配你想要达到的目标。

一个关键是为当前显示的片段提供某种容器(而不是像在XML中那样使用<fragment>)。例如:在Android开发文档Add a Fragment to an Activity at Runtime

<FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

然后,切换片段是这样的:

Fragment fragment = new Fragment2(); 
// Insert the fragment by replacing any existing fragment 
FragmentManager fragmentManager = getFragmentManager(); 
fragmentManager.beginTransaction() 
       .replace(R.id.content_frame, fragment) 
       .commit(); 

进一步阅读。

+0

@Jonik http://stackoverflow.com/questions/23356848/transaction-between-fragment-and-activity你能帮我吗? – Noufal