2013-07-01 3 views
0

Я новичок в фрагментах и ​​пытаюсь решить это в течение нескольких дней. Я пытаюсь обновить свои фрагменты на клике listview и очень похож на этот: Fragment in fragment do not refresh , где есть и список слева, и вкладка ui справа. Вот один из моих фрагментов:Обновление фрагмента в элементе списка Нажмите

public static class DescriptionFragment extends Fragment { 

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


     View rootView = inflater.inflate(R.layout.fragment_section_description, container, false); 

     text = ((TextView) rootView.findViewById(R.id.description)); 

     text.setText(Html.fromHtml(description_text)); 


     return rootView; 
    } 

, как я могу назвать этот фрагмент (внутри основной деятельности), так onCreateView обновляется и TextView «текст» обновляется? Любая помощь с благодарностью

ПРИМЕЧАНИЕ: listview - это не фрагмент, а отдельный файл макета для планшета. Мои только фрагменты (такие как DescriptionFragment) предназначены для лапок

+0

http://android-er.blogspot.in/2011/12/access-view-inside-fragment-from.html. может помочь – Raghunandan

ответ

0

Я предполагаю, что вы зафиксируете показать ListView и при щелчке ListItem, значение должно быть обновление:

Как я могу назвать эту fragement (изнутри основное действие), так что onCreateView обновляется и текст textview обновляется?

Для вызова фрагмента в основной деятельности, вы должны определить фрагмент в стороне главного файла 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:id="@+id/frag_series" 
android:layout_width="200dip" 
android:layout_height="match_parent" 
android:layout_marginTop="?android:attr/actionBarSize" 
class="com.example.demo_fragment.MyListFragment" /> 
</LinearLayout> 

Теперь расширяет Listframent вместо и код, чтобы заполнить данные ListView позже огонь нажмите событие, как показано ниже

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
String item = (String) getListAdapter().getItem(position); 
DetailFragment frag = (DetailFragment) getFragmentManager().findFragmentById(R.id.frag_capt); 
if (frag != null && frag.isInLayout()) { 
frag.setText(getCapt(item)); 
} 
} 

, а затем проверить состояние и обновить Воулс, как показано ниже:

private String getCapt(String ship) { 
if (ship.toLowerCase().contains("android")) { 
return "Andy Rubin"; 
} 
if (ship.toLowerCase().contains("IOS")) { 
return "Steve Jobs"; 
} 
return "???"; 
} 
+0

спасибо за помощь. Я поместил фрагмент в свой xml-файл, но это в моем списке: «ОписаниеFragment frag = (DescriptionFragment) getFragmentManager(). findFragmentById (R.id.frag_description);" дает мне ошибку Невозможно отбросить из фрагмента в kick_activity.DescriptionFragment –

0

Так вы можете назвать свой фрагмент.

DescriptionFragment descriptionFragment = (DescriptionFragment) 
getFragmentManager().findFragmentById(R.id.yourFragmentId); 
0

Вы должны создать слушателю Interface что-то вроде этого

public interface FragmentTransactionListener { 
    public void updateFragment(/*some attributes*/); 
} 

тогда вы должны реализовать интерфейс на вашем Fragment и переопределить метод updateFragment. В этом методе вы можете добавить свой код, который будет выполняться в Fragment при щелчке по элементу списка. Что-то вроде этого

public static class DescriptionFragment extends Fragment implements FragmentTransactionListener { 

... 

    @Override 
    public void updateFragment(/*some attributes*/) { 
     //do some stuff 
    } 

... 

Когда фрагмент создается в вашем FragmentActivity получить экземпляр этого слушатель и вызвать его, когда список вашего деталь щелкнул. Нечто подобное этому коду

FragmentTransactionListener listener = instance of your fragment; 

//in your list item you then call this 
listener.updateFragment(/*some attributes*/); 

надеюсь, что это помогает

Смежные вопросы