2017-09-08 1 views
1

두 조각이 있습니다. 조각과 컨트롤 조각. addfragment에서 조각 트랜잭션이있는 번들을 사용하여 데이터를 보낸 다음 컨트롤 조각에서 번들을 사용하여 해당 데이터를 가져 오려고하지만 데이터를 가져올 수 없습니다. 그래서 PLZ 여기 한 조각에서 다른 조각으로 번들 데이터를 얻는 방법은 무엇입니까?

 relaylist.setAdapter(adapter); 
relaylist.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 


     HashMap<String, String> o = (HashMap<String, String>) relaylist.getItemAtPosition(position); 



     Log.e("ip: ", "> " + o.get("ip")); 
     Log.e("port: ", "> " + o.get("port")); 
     Log.e("uname: ", "> " + o.get("uname")); 
     Log.e("password: ", "> " + o.get("password")); 


     ControlFragment fragment = new ControlFragment(); 
     FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
     Bundle bundle = new Bundle(); 
     bundle.putString("ip", o.get("ip")); 
     bundle.putString("port", o.get("port")); 
     bundle.putString("uname", o.get("uname")); 
     bundle.putString("password", o.get("password")); 
     Log.e("ip: ", "> " + o.get("ip")); 
     Log.e("port: ", "> " + o.get("port")); 
     Log.e("uname: ", "> " + o.get("uname")); 
     Log.e("password: ", "> " + o.get("password")); 
     fragment.setArguments(bundle); 
     transaction.replace(R.id.mainFrame, new ControlFragment()); 

     transaction.commit(); 
    } 
}); 

및 제어 조각에서 내가 데이터를이 방법으로 얻을 수의 트랜잭션 조각 내 addfragment입니다 도와 ...하지만 데이터를

public class ControlFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View rootView= inflater.inflate(R.layout.fragment_control, container, false); 
     Bundle bundle = getArguments(); 

      String ip=bundle.getString("ip"); 
      Stirng port = bundle.getString("port"); 
      Stirng uname = bundle.getString("uname"); 
      Stirng password = bundle.getString("password"); 
+1

무엇을 얻고 있습니까? 디버그를 시작 했습니까? – Anonymous

+0

다음과 같은 오류가 발생합니다 ... java.lang.NullPointerException : null 객체 참조에서 가상 메소드 'java.lang.String android.os.Bundle.getString (java.lang.String)'을 호출하려고 시도했습니다. –

+0

가능한 중복 [하나의 Fragment에서 다른 Fragment로 데이터를 보내는 방법?] (https://stackoverflow.com/questions/24555417/how-to-send-data-from-one-fragment-to-another-fragment) –

답변

3

개체 대신 생성자를 설정하고 있습니다. 코드 아래

ControlFragment fragment = new ControlFragment(); 
     FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
     Bundle bundle = new Bundle(); 
     bundle.putString("ip", o.get("ip")); 
     bundle.putString("port", o.get("port")); 
     bundle.putString("uname", o.get("uname")); 
     bundle.putString("password", o.get("password")); 
     Log.e("ip: ", "> " + o.get("ip")); 
     Log.e("port: ", "> " + o.get("port")); 
     Log.e("uname: ", "> " + o.get("uname")); 
     Log.e("password: ", "> " + o.get("password")); 
     fragment.setArguments(bundle); 
     transaction.replace(R.id.mainFrame, fragment ); 

transaction.replace (R.id.mainFrame, 조각)를 사용;

변경되었습니다.

+1

Thnx 많이 ...... ...... –

+0

만약이 도움이, 당신은 내 대답을 받아 들일 수 있습니다. –

+0

예이 올바른 대답을해야합니다. 그는 번들 데이터를 만들고 argueements을 받고있는 동안 null로 번들을 만드는 조각의 새로운 인스턴스를 다시 만듭니다 – Anonymous

0

사용을 얻을 수 없다 이 줄

번들 번들 = getArguments();

당신은 당신의 rootview 인플레이터 전에

+0

이것은 아닙니다. 일하고 ... –

0

수행 data.Hope을 설정하면이 당신에게

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Bundle bundle = getArguments(); 
    if (bundle != null) { 
     String ip=bundle.getString("ip"); 
     Stirng port = bundle.getString("port"); 
     Stirng uname = bundle.getString("uname"); 
     Stirng password = bundle.getString("password"); 
    } 
} 

편집을하는 데 도움이되기 전에 널 검사 오류를 할 oncreate.Always에서 한 OnCreate보기 전에 가져 오는 데이터 :

Amrish Kakadiya가 지적한 바대로

transaction.replace (R.id.mainFrame, new C ontrolFragment());

이 코드 줄은 문제를 일으키고 있습니다. 새로운 ControlFragment()는 조각의 완전히 새로운 인스턴스를 만들고 따라서 가져 오는 동안 getArguments()를 null로 가져옵니다.

관련 문제