0

Я хочу заменить фрагмент, который имеет представление списка с другим фрагментом, когда щелкнут элемент в названии списка.Замена одного фрагмента на другой через ListView

Вот мой MainActivity

public class MainActivity extends FragmentActivity { 
private FragmentTabHost hostTab; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    hostTab = (FragmentTabHost)findViewById(android.R.id.tabhost); 
    //hostTab = (TabHost) findViewById(R.id.tabhost); 
    hostTab.setup(this,getSupportFragmentManager(), android.R.id.tabcontent); 

    hostTab.addTab(
      hostTab.newTabSpec("tab1").setIndicator("Tab 1", 
        getResources().getDrawable(android.R.drawable.star_on)), 
      FragmentTab.class, null); 
    hostTab.addTab(
      hostTab.newTabSpec("tab2").setIndicator("Tab 2", 
        getResources().getDrawable(android.R.drawable.star_on)), 
      FragmentTab1.class, null); 
    hostTab.addTab(
      hostTab.newTabSpec("tab3").setIndicator("Tab 3", 
        getResources().getDrawable(android.R.drawable.star_on)), 
      FragmentTab2.class, null); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

} 

Вот мой activity_main.xml

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/replace" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<android.support.v4.app.FragmentTabHost 

    android:id="@android:id/tabhost" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 
     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="0" 
      android:orientation="horizontal" /> 

     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_weight="1" /> 
    </LinearLayout> 
</android.support.v4.app.FragmentTabHost> 

А вот код "Tab 1" .don't ума «Tab 2 »и« Tab 3 ». Два только показывает некоторые Вид текста

public class FragmentTab extends ListFragment implements OnItemClickListener { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    String[] values = new String[] { "Fragment1", "Fragment2", "Fragment3"}; 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, values); 
    setListAdapter(adapter); 
} 
@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 

    // Create new fragment and transaction 
    Fragment newFragment = new FragmentInListView(); 
    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    //transaction.show(newFragment); 
    // Replace whatever is in the fragment_container view with this fragment, 
    // and add the transaction to the back stack 
    transaction.replace(R.id.replace, newFragment); 
    transaction.addToBackStack(null); 
    transaction.setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
    // Commit the transaction 
    transaction.commit(); 

@Override 
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
    // TODO Auto-generated method stub 

} 

} 

и здесь является расположение XML для «Tab 1»

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:gravity="center_horizontal" 
android:orientation="vertical" > 

<ListView 
    android:id="@+id/lv" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

</ListView> 

А вот класс, который будет отображаться, когда элемент в списке просматривается щелчок

public class FragmentInListView extends Fragment { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 

    View view = inflater.inflate(R.layout.fragment_layout1, 
      container, false); 
     TextView tv= (TextView) view.findViewById(R.id.text); 
     tv.setText("Fragment in List View"); 
     return view; 

} 

} 

Пожалуйста, помогите, пожалуйста, запросите коды для загрузки. Спасибо в объявлении. Вэнс.

+0

Я вижу проблему, в которой у вашего ListView для фрагмента списка есть андроид: id = "@ + id/lv", но для фрагмента списка необходимо иметь android: id = "@ android: id/list" –

+0

Нет, это не nessesery , Если вы хотите использовать 'android.R.layout.simple_list_item_1', вам не нужно определять список в файле XML – Serafins

ответ

1

Вы должны создать метод, например «ItemSelected» в Activity. Затем отправьте идентификатор выбранного элемента из FragmentList в Activity и в Activity replace. Here is best example Я могу посоветовать вам скачать образец, чтобы увидеть, как работают фрагменты

+0

Привет, sir.Thanks для ответа. Можете ли вы отредактировать мой код и опубликовать его здесь? I; m new to android programming.Sorry. – androidNoob

+0

Нет, я не могу работать для вас. Но вы можете скачать пример из webiste, ссылку в моем ответе и попытаться настроить его. – Serafins

+0

ОК спасибо в любом случае. – androidNoob

0

Я такой тупой.хаха.

только что скорректируйте transaction.replace (R.id.replace, newFragment);

с

transaction.replace (R.id.tabcontent, newFragment);