2017-11-23 4 views
-1

(Ich möchte eine App 40 Artikel einer Nachrichtenwebsite zeigen.) Ich habe ein Problem mit einem String zu einer anderen Klasse. Ich habe einen String "link" in meinem "Menu1.java" und möchte ihn im "Menu1_1_Artikel.java" verwenden. Die Getter-Methode funktioniert. Aber ich weiß nicht, wie man den Wert von "Verbindung" einstellt. Jedes Mal, wenn ich es versuche, erhält es nur "Null" anstelle des Links des Artikels, der auf der Listenansicht angeklickt wird. :/Erhalte eine Zeichenfolge zu einer anderen Aktivität

public class Menu1 extends Fragment { 
private ListView lv; //Listview which shows 40 articles from a news website 
private ArrayAdapter adapter; 
public ArrayList liste = new ArrayList(); 
private ProgressDialog progressDialog; 
private String[] myStringArray = new String[40]; //Array with 40 URLs 
public String link; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_menu_1, container, false); 
    lv = (ListView)view.findViewById(R.id.list); 
    adapter = new ArrayAdapter(getActivity(), R.layout.list_item, liste); 
    new datenAbrufen().execute(); //Method which loads the 40 articles 

    lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      link = myStringArray[position]; //Save the URL to the article which is clicked on the listview to "link"   

      Menu1 obj = new Menu1(); 
      obj.setLink(link); //I think here is the problem because the value is not in the Getter Method.. 

      Toast.makeText(getActivity(), link, Toast.LENGTH_LONG).show(); //Output: Shows the URL from article -> "link" have a value 


      //Fragment 
      Fragment fragment = null; 
      fragment = new Menu1_1_Artikel(); 
      if (fragment != null) { 
       FragmentTransaction ft = getFragmentManager().beginTransaction(); 
       ft.replace(R.id.content_frame, fragment); 
       ft.commit(); 
      } 
     } 
    }); 
    return view; 
} 



public String getLink(){ 
    return this.link; //Problem: String "link" = null 
} 
public void setLink(String Str){ 
    this.link= Str; 
    //Toast.makeText(getActivity(), link, Toast.LENGTH_LONG).show(); //Toast would show an Error: "Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference" 
} 
//[......] 

}

public class Menu1_1_Artikel extends Fragment { 
private String link; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_webview, container, false); 

    link= "Test"; 
    Toast.makeText(getActivity(), "1.: "+link, Toast.LENGTH_LONG).show(); //Output: "Test" 

    Menu1 obj = new Menu1(); 
    link= obj.getLink(); 

    Toast.makeText(getActivity(), "2.: "+link, Toast.LENGTH_LONG).show(); //Output: "null" 


    return view; 
} 
//[......] 

}

Antwort

0

Sie Bündel und Extras verwenden sollten:

Fragment fragment = null; 
       fragment = new Menu1_1_Artikel(); 
       if (fragment != null) { 
        Bundle args = new Bundle(); 
        args.putString("link", link); 
        fragment.setArguments(args); 
        FragmentTransaction ft = getFragmentManager().beginTransaction(); 
        ft.replace(R.id.content_frame, fragment); 
        ft.commit(); 
       } 

Und erhalten den Link ok Menu1_1_Artikel

 @Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_webview, container, false); 

    Bundle bundle=getArguments(); 
    link = bundle.getString("link"); 

    Toast.makeText(getActivity(), "2.: "+link, Toast.LENGTH_LONG).show(); //Output: "null" 


    return view; 
} 
0

Zuerst müssen Sie die „Menu1“ Klasse machen parcel oder serialisable zu implementieren,

Dann stellen Sie die Argumente auf Fragmente,

Bundle bundle = new Bundle(); 
bundle.putParcelable("obj", obj); 
Fragment fragment = null; 
fragment = new Menu1_1_Artikel(); 
fragment.setArguments(bundle); 

Dann rufen Sie sie wie folgt in einem anderen Fragment wie folgt,

Menu1 latitude = getArguments().getParcelable("obj") 
Verwandte Themen