-2

Hallo Ich habe eine Aufgabe zum Erstellen von Inhalten im Fragment-Grundlayout gegeben. Wenn ich jedoch eine Swipe-Aktivität mit der Aktionsleiste auf der Registerkarte erstellt habe, kann ich das Fragmentlayout in den einzelnen Tabs nicht bearbeiten. Hier ist die Codes wie folgt:Interagieren mit Sichten in Fragmentaktivität nicht möglich

MainActivity.java: Methode i an das Fragment-Layout verweisen verwenden
(eine Standard-Swipe-Aktivität mit der Aktion Registerkarte erstellt)

package com.example.clement.testingfragments; 


public class MainActivity extends AppCompatActivity { 


private SectionsPagerAdapter mSectionsPagerAdapter; 
private ViewPager mViewPager; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 


    mViewPager = (ViewPager) findViewById(R.id.container); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 
    // action bar 
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(mViewPager); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 

    //manage the fractions 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = 
      fragmentManager.beginTransaction(); 
    fragmentTransaction.replace(android.R.id.content, new BlankFragment()); 
    fragmentTransaction.commit(); 


} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

public static class PlaceholderFragment extends Fragment { 

    private static final String ARG_SECTION_NUMBER = "section_number"; 

    public PlaceholderFragment() { 
    } 

    public static PlaceholderFragment newInstance(int sectionNumber) { 
     PlaceholderFragment fragment = new PlaceholderFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     if(getArguments().getInt(ARG_SECTION_NUMBER) == 1) { 

      View rootView = inflater.inflate(R.layout.fragment_blank, container, false); 
      return rootView; 
     }else { 

      View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
      TextView textView = (TextView) rootView.findViewById(R.id.section_label); 
      textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER))); 
      return rootView; 

     } 
    } 
} 

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     // getItem is called to instantiate the fragment for the given page. 
     // Return a PlaceholderFragment (defined as a static inner class below). 
     return PlaceholderFragment.newInstance(position + 1); 
    } 

    @Override 
    public int getCount() { 
     // Show 3 total pages. 
     return 3; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: 
       return "SECTION 1"; 
      case 1: 
       return "SECTION 2"; 
      case 2: 
       return "SECTION 3"; 
     } 
     return null; 
    } 
    } 
} 

Ich habe dann die BlankFragment.java : (Standard Schaffung eines Fragments Grundlayout)

public class BlankFragment extends Fragment { 



TextView mtv; 
public BlankFragment() { 
    // Required empty public constructor 
} 





@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    Log.i("hello","hello"); 

    View viewRoot = inflater.inflate(R.layout.fragment_blank, container, false); 

     mtv = (TextView)viewRoot.findViewById(R.id.testy); 
     mtv.setText("hello"); 
     return viewRoot; 


    } 

    } 

Das Problem dabei ist, dass ich ein nicht in der Lage bin Textview zu ändern, die innerhalb des fragment_blank.xml ist. Ich habe Forschung über das Internet und die Vorschläge wurden erstellt, um void-Methoden, mit getActivity(), onViewCreated(), Onstart(). All diese Dinge scheinen nicht zu funktionieren.

Ich habe eine if else-Schleife eingefügt, um eine Null zurückzugeben, unter der Bedingung, dass die Methode funktioniert, aber es läuft immer noch ohne eine Null zurückgeben und ich habe keine Ahnung, warum dies passiert.

Mein fragment_blank.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.example.clement.testingfragments.BlankFragment"> 

<TextView 
    android:id="@+id/testy" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:text="@string/hello_blank_fragment" /> 

</FrameLayout> 

Lassen Sie mich wissen, wenn mehr Informationen benötigt werden. Ich suche aufrichtig nach Ihren Vorschlägen und Ratschlägen. Danke im Voraus!

Antwort

0

Gemäß Ihrer Frage befindet sich Ihre Textansicht in basicfragmentlayout.xml, während Sie in Ihrer onCreateView fragment_blank aufblasen. Sie müssen wie unten Ihren Code ändern:

MyActivity.java

public class MyActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = 
       fragmentManager.beginTransaction(); 
     fragmentTransaction.replace(android.R.id.content, new MyFragment()); 
     fragmentTransaction.commit(); 
    } 
} 

MyFragment.java

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 MyFragment extends Fragment { 
    View myView; 

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

     TextView mtv = (TextView) myView.findViewById(R.id.testy); 
     mtv.setText("hello"); 

     return myView; 
    } 
} 

fragment_my.java

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:id="@+id/testy" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="TempText" /> 

</FrameLayout> 
+0

oh verdammt so sorry ich schrieb die falsche XML-Datei für die Frage herunter. Es wurde bearbeitet. Bitte lesen Sie erneut dafür –

+0

posten Sie Ihre XML und entfernen Sie unnötigen Code aus der Frage. –

+0

okay, hier gehst du :) –

Verwandte Themen