J'ai un fragment:android - méthode fragment ne peut pas accéder à des variables déclarées plus tôt
public class VertretungsplanTab extends Fragment implements MainActivity.VertDataInterface{
TextView vertretungsView;
String LOG_TAG = VertretungsplanTab.class.getSimpleName();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.vertretungsplan_fragment, container,false);
vertretungsView = (TextView) rootView.findViewById(R.id.textView2);
vertretungsView.setText("initialised");
return rootView;
}
@Override
public void onRefreshed(Fragment tab,String data){
Log.v(LOG_TAG, "interface is working");
if(vertretungsView!=null) {
vertretungsView.setText(data);
}
else{
Log.e(LOG_TAG, "TextView is null object");
}
}
}
Le code d'interface est-ce dans MainActivity:
public class MainActivity extends AppCompatActivity {
VertDataInterface mdataInterface;
private Fragment Vertretungstab;
public interface VertDataInterface {
public void onRefreshed(Fragment tab,String data);
}
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);
// Create the adapter that will return a fragment for each of the three
// primary sections of the activity.
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
Vertretungstab = mSectionsPagerAdapter.getItem(1);
try {
mdataInterface = (VertDataInterface) Vertretungstab;
} catch (ClassCastException e) {
Log.e(LOG_TAG, e + " fragment must implement VertDataInterface");
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_refresh) {
mdataInterface.onRefreshed(Vertretungstab,"cool");
return true;
}
return super.onOptionsItemSelected(item);
}
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
DashboardTab tabDashboard = new DashboardTab();
return tabDashboard;
case 1:
VertretungsplanTab tabVertretungsplan = new VertretungsplanTab();
return tabVertretungsplan;
default:
return null;
}
}
@Override
public int getCount() {
// Show 2 total pages.
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Dashboard";
case 1:
return "Vertretungsplan";
}
return null;
}
}
}
Et j'ai une question: Pourquoi suis-je incapable d'accéder à mon TextView dans mon interface? pourquoi puis-je définir le texte dans la méthode onCreate et pourquoi obtient-il seulement une référence d'objet nul dans la méthode d'interface ?! Après une longue recherche sur Internet, je serais heureux si un développeur plus avancé pouvait obtenir une solution!
fournir votre code d'interface s'il vous plaît –
Je ne vois pas votre interface metho d ici. Je pense que vous avez fait quelque chose de mal à cela. –
essayez d'ajouter l'annotation @Override avant la méthode onRefreshed dans votre classe VertretungsplanTab –