2016-11-27 2 views
-3

Сегодня я попытался создать свое собственное собственное приложение для Android.вызов метода в андроидном фрагменте из mainActivity

Я хотел получить основную деятельность, которая показывает фрагмент (в моем случае это называется «eingabeFragment»). Этот фрагмент содержит editText и кнопку. Как только кнопка нажата, я хочу, чтобы «eingabeFragment» исчез и появился новый «anzeigeFragment».

Все работает нормально. Теперь я хочу, чтобы текст, введенный в «eingabeFragment», отображался в моем «anzeigefragment».

Я попытался управлять этим с помощью интерфейса в «eingabefragment», который реализуется в результате действия.

Как только кнопка нажата, mainactivity извлекает текст из «eingabeFragment», вызывая метод getText.

Для целей отладки я добавил System.out.println для проверки моей программы. Знаю, что эта часть работает нормально.

Теперь я думал, что мне просто нужно добавить эту строку в текстовое изображение в моем «anzeigeFragment». К сожалению, выход «Fragment not found», что означает, что я получаю Nullpointer, когда я вызываю свой метод setInfo в своем «anzeigenFragment».

Мой вопрос заключается в том, как получить доступ к общедоступным методам во фрагменте из активности после того, как этот фрагмент заменил старый фрагмент.

AnzeigeFragment

package local.mydomain.versuch; 


import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 


public class AnzeigeFragment extends Fragment { 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.fragment_anzeige, container, false); 


} 

public void setInfo(String text) 
{ 
    TextView az = (TextView) getView().findViewById(R.id.output); 
    az.setText(text); 
} 



} 

EingabeFragment

package local.mydomain.versuch; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.EditText; 


public class EingabeFragment extends Fragment { 
public static String MESSAGE = "local.mydomain.versuch.MESSAGE"; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.fragment_eingabe, container, false); 


} 

public interface Clicked{ 
    public void pressed(View view); 
} 

public String getInfo() 
{ 
    EditText et = (EditText) getView().findViewById(R.id.eingabe); 
    String result = et.getText().toString(); 
    return result; 
} 

} 

и, наконец, MainActivity

package local.mydomain.versuch; 

import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentTransaction; 
import android.os.Bundle; 
import android.view.View; 

public class MainActivity extends FragmentActivity implements EingabeFragment.Clicked{ 

public static String MESSAGE = "local.mydomain.versuch.MESSAGE"; 
private EingabeFragment eingabeFragment; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    if(findViewById(R.id.fragment_container)!=null) 
    { 
     if (savedInstanceState != null) 
     { 
      return; 
     } 
    } 
    eingabeFragment = new EingabeFragment(); 
    getSupportFragmentManager().beginTransaction(). 
      add(R.id.fragment_container,eingabeFragment, "Eingabe").commit(); 

} 

@Override 
public void pressed(View view) { 

    EingabeFragment ef = (EingabeFragment) getSupportFragmentManager().findFragmentByTag("Eingabe"); 
    String info = ef.getInfo(); 

    System.out.println(info); 

    AnzeigeFragment anzeigeFragment = new AnzeigeFragment(); 
    FragmentTransaction transaction= getSupportFragmentManager().beginTransaction(); 
    transaction.replace(R.id.fragment_container, anzeigeFragment, "AnzeigeFrag"); 
    transaction.addToBackStack(null); 

    transaction.commit(); 

    AnzeigeFragment az = (AnzeigeFragment) getSupportFragmentManager().findFragmentByTag("AnzeigeFrag"); 

    if (az==null) 
    { 
     System.out.println("Fragment not found"); 
    } 
    else 
    { 
     System.out.println("Everything ok"); 
     az.setInfo(info); 
    } 

    System.out.println(info); 
} 
} 

Любое объяснение будет оценено

ответ

0

Вы можете связаться ю е сообщение между двумя фрагмента с помощью пучка

Обновить код что-то вроде этого

AnzeigeFragment anzeigeFragment = new AnzeigeFragment(); 

Bundle data=new Bundle() 
Data.putStringExtra("messagekey","message value"); 

anzeigeFragment.setArguments(data); 
> FragmentTransaction transaction= 
> getSupportFragmentManager().beginTransaction(); 
> transaction.replace(R.id.fragment_container, anzeigeFragment, 
> "AnzeigeFrag"); transaction.addToBackStack(null); 

Далее в вашем втором фрагменте Вы можете получить эти данные с помощью вызова getArgument() метод фрагмента.

И затем getStringExtra ("messagekey").

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