2016-11-27 18 views
-3

今天我嘗試構建我的第一個自己的Android應用程序。從mainActivity調用android片段中的方法

我想得到一個顯示片段的主要活動(在我的情況下,它被稱爲「eingabeFragment」)。這個片段包含一個editText和一個按鈕。只要按下按鈕,我希望「eingabeFragment」消失,並顯示一個新的「anzeigeFragment」。

到目前爲止一切正常。現在我想要在「eingabeFragment」中輸入的文本顯示在我的「anzeigefragment」中。

我試圖用活動實現的「eingabefragment」中的一個接口來管理它。

只要按下按鈕,mainactivity就會通過調用我的getText方法來從「eingabeFragment」中獲取文本。

爲了調試目的,我添加了一個System.out.println來測試我的程序。 所以我知道,這部分工作正常。

現在我想我只需要添加這個字符串到我的「anzeigeFragment」的textview。不幸的是,輸出是「未找到碎片」,這意味着當我在「anzeigenFragment」中調用我的「setInfo」方法時,我會得到一個Nullpointer。

我的問題是如何在片段替換舊片段後訪問片段中的公共方法。

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

您可以溝通日通過捆綁

更新通過調用getArgument(你的代碼是這樣的

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); 

而且在你的第二個片段,您可以檢索此數據)你的兩個片段之間Ë消息片段法。

然後getStringExtra(「messagekey」)方法。

相關問題