2016-08-10 21 views
-1
public class FragActivity1 extends Fragment implements View.OnClickListener { 

    View view; 
    ImageButton name_change__btn, status_change_btn, profile_change_btn; 
    ImageView person_dp; 
    TextView status_field , name_field; 
    . 
    . 
    . 
    .some code here 

Ich habe diese Klasse mit changeName-Methode, die Text einer Textansicht ändert. name_field wird geschrieben als:Kommunikation zwischen Fragment und anderer Aktivität

name_field=(TextView)view.findViewById(R.id.name_field); 

Jetzt bin ich diese Methode aus einem Popup-Taste aufrufen, wo ich zur Laufzeit einige String-Wert bin vorbei.

Ich bekomme Nullpointer Ausnahme.

public void changeName(String s) 
{ 

    Log.d("changename entry" ,"changename netry"); 
    System.out.println(s); 
    System.out.println(name_field.getText().toString()); 
     name_field.setText(s); 
    System.out.println(name_field.getText()); 
} 

Hier ist der Code, der Popup-Klasse:

public class Name_Status extends AppCompatActivity implements View.OnClickListener { 

    EditText name_change; 
    RelativeLayout name_status_edit_field; 
    String name; 
    Button cancel_name_change , ok_name_change; 
    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.name_status); 
     DisplayMetrics dm=new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(dm); 

     int width=dm.widthPixels; 
     int height=dm.heightPixels; 

     getWindow().setLayout((int)(width*.8),(int)(height*.3)); 
     name_change=(EditText)findViewById(R.id.change_name); 
     name_status_edit_field= (RelativeLayout)findViewById(R.id.name_status_edit_field); 

     cancel_name_change=(Button)findViewById(R.id.cancel_change_name); 
     ok_name_change=(Button)findViewById(R.id.ok_change_name); 
     ok_name_change.setOnClickListener(this); 
     name_change.setOnClickListener(this); 
     name_status_edit_field.clearFocus(); 
     name_change.setFocusable(true); 
     //name_change.update(); 
    } 

    @Override 
    public void onClick(View v) { 

       if(v.getId()==R.id.ok_change_name) 

       { 
        name=name_change.getText().toString(); 
        System.out.println(name); 
        Log.d("entered","entred"); 
        FragActivity1 obj=new FragActivity1(); 
        Log.d("obj created", "obj created"); 
        obj.changeName(name); 
        Log.d("obj.changename","obj.changename"); 
        Intent intent=new Intent(); 
        Log.d("intenthsjjsjs","intent hxjjx"); 
        intent.setClass(Name_Status.this , MainActivity.class); 
        startActivity(intent); 
       } 
    } 
} 

Ich fand sogar gesucht und dass Fragmente nicht direkt mit anderem Fragmente oder Aktivität kommunizieren können. Aber konnte nicht gut verstehen. Und dieses Popup ist eine neue Aktivität außer der, die mein Fragment enthält. Also, wie zwischen Fragment und anderer Aktivität zu kommunizieren?

Ich hoffe, ich könnte mein Problem gut erklären. Bitte versuchen Sie es in Laiensprache zu erklären.

+0

Sie tun dies 'FragActivity1 obj = new FragActivity1();'. Dies ist ein grundlegender Fehler, den Sie machen. Ich glaube, du versuchst viele Lektionen zu springen. Machen Sie einen Schritt nach dem anderen. – Sufian

Antwort

0

Die Kommunikation zwischen Fragmenten und der Aktivität, der sie zugeordnet sind, wird erläutert here. Vom Fragment zur Aktivität verwenden Sie einfach getActivity für einen Verweis auf die Aktivität. Von der Aktivität zum Fragment können Sie die findFragmentById(R.id.fragment_id)-Methode der FragmentManager für einen Verweis auf das Fragment verwenden, mit dem Sie kommunizieren möchten.

Kommunikation zwischen Aktivitäten wird durch Intent s und ihre Extras wie beschrieben here realisiert. Sie setzen Ihre Daten grundsätzlich in eine Bundle und fügen sie in die Ìntent mit putExtras() ein.

In Ihrem Fall sollten Sie zuerst das Fragment kommunizieren mit seine Aktivität und dann starten Sie eine neue Aktivität mit einem Bundle von hier.

+0

sagst du, ich sollte zuerst von Fragment zu der Aktivität kommunizieren, die das Fragment enthält und dann von dieser Aktivität mit anderen Aktivitäten kommunizieren? @ KalaBalik –

+0

@AbhishekKumar Genau. – kalabalik

+0

können Sie mir ein Beispiel mit 2 Aktivitäten geben, wobei eines das Fragment enthält und die Kommunikation zwischen der Aktivität (ohne Fragment) und dem Fragment besteht. Nehmen wir an, einige Daten von der Aktivität (ohne Fragment) an das Fragment zu senden. Es wäre deine Dankbarkeit. –

Verwandte Themen