2015-03-03 3 views
0

Итак, у меня есть 2 фрагмента и активность. Эти 2 фрагмента обмениваются друг с другом через интерфейс. Проблема в том, что я не могу изменить TextView во втором фрагменте из Activity с некоторым текстом из фрагмента1.Невозможно изменить TextView фрагмента в реальном времени

Существует та же проблема (How to change fragment's textView's text from activity), но нет реального решения, поэтому я думал, что должен открыть это.

Фрагмент 1:

public class test_layout extends Fragment { 

DearListener activityCommander; 
TextView custom_question_bar, list_number; 
String selectedCustomQuestion; 
boolean buttonClicked; 
Button yiyecekButton; 
Context c; 

public interface DearListener { 
    public void getMyText(String theQuestion); 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    try { 
     activityCommander = (DearListener) activity; 
     Log.i("MYLOG", "onAttach"); 
    } catch (ClassCastException e) { 
     throw new ClassCastException(activity.toString()); 
    } 
} 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.new_test_layout, container, false); 
    //custom_question_bar= (TextView) v.findViewById(R.id.custom_question_bar); 
    //list_number= (TextView) v.findViewById(R.id.list_number); 
    yiyecekButton = (Button) v.findViewById(R.id.yiyecekButton); 
    Log.i("MYLOG", "Button referenced"); 
    yiyecekButton.setOnClickListener(
      new Button.OnClickListener(){ 
       public void onClick(View v){ 
        Log.i("MYLOG", "onCLickListener Called"); 
        onClickYiyecek(v); 

       } 
    } 
    ); 
    return v; 
} 

public void onClickYiyecek(View v){ 
    Log.i("MYLOG", "OnClickYiyecek"); 
    activityCommander.getMyText("En sevdiğim yiyecek ne?"); 
} 

public void onClickQuestionReady(View v){ 
    if(custom_question_bar == null) 
    { 
     Toast.makeText(c, "Boşluğu doldurmadınız", Toast.LENGTH_SHORT).show(); 
    } 
    activityCommander.getMyText(custom_question_bar.getText().toString()); 
} 

}

И активность:

public class NewTest extends Activity implements test_layout.DearListener { 

FragmentManager manager; 
test_layout test_layout_frag; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fragment_holder); 
    manager=getFragmentManager(); 
    test_layout_frag = new test_layout(); 
    FragmentTransaction transaction = manager.beginTransaction(); 
    transaction.add(R.id.the_frame_layout, test_layout_frag); 
    transaction.commit(); 
} 
@Override 
    public void getMyText(String theQuestion) { 
     manager=getFragmentManager(); 
     answer_layout answer_layout_frag = new answer_layout(); 
     answer_layout answer_layout_obj = (answer_layout)getFragmentManager().findFragmentById(R.id.fragment2); 
     answer_layout_obj.changeText(theQuestion); 
     FragmentTransaction transaction = manager.beginTransaction(); 
     transaction.replace(R.id.the_frame_layout, answer_layout_frag); 
     transaction.commit(); 
    Log.i("MYLOG", "Transaction Called"); 
    //transaction.addToBackStack(null); 
} 

}

И второй фрагмент:

public class answer_layout extends Fragment { 
TextView yourSelectedQuestion; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.new_answer_layout, container, false); 
    yourSelectedQuestion= (TextView) v.findViewById(R.id.yourSelectedQuestion); 
    return v; 
} 
public void changeText(String a) { 
    Log.i("MYLOG", "changeText"); 
    Log.i("MYLOG", a); 
    yourSelectedQuestion.setText(a); 
} 

}

Нет исключений дается, но TextView во втором фрагменте не меняется.

Поскольку я не писал xml здесь, я могу, если это необходимо. Использование FrameLayout и содержит в себе 2 фрагмента.

ответ

0

В myFragment классе написать статический метод:

public static myFragment newInstance(String txt) { 
     myFragment myfragment = new myFragment(); 

     Bundle args = new Bundle(); 
     args.putString("TEXT", txt); 
     myfragment.setArguments(args); 

     return myfragment; 
    } 

после этого в OnCreate методом myFragment класса inflatetextView tv и

tv.setText(getArguments().getString("TEXT")); 

В главном FragmentActivity классе сделать:

myFragment fragment = myFragment.newInstance(textToBeSent); 

перед тем replace,

fragmentTransaction.replace(R.id.fr_dynamic, fragment); 
fragmentTransaction.commit(); 
+0

Работа над другим проектом прямо сейчас, но спасибо за ответ сэр! Я посмотрю на это. – MyHeartsECO

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