-1

Goodmorning alle, ich bin sehr neu auf Android und ich möchte eine Aktion eines Knopfes eines Fragments setzen ... Ich verwende diese Weise:ändern Aktivität von Schaltfläche in einem Fragment

Button butt1=(Button)findViewById(R.id.btn1); 



    butt1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent int1=new Intent(MainActivity.this,newactivity.class); 
      startActivity(int1); 


      finish(); 



     } 
    }); 

Das Problem ist, dass ich nicht weiß, wo diese Aktion platziert werden soll, wenn in der Hauptaktivitätsklasse oder in der Importfragmentklasse die Importfragmentklasse eine Liste mit Schaltflächen ist und ich möchte, dass jede Schaltfläche in eine andere verschoben wird Aktivität.

Dies ist der ImportFragment.class Code:

public class ImportFragment extends Fragment { 
ListView listView; 

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



    return rootView; 

} 

}

Dies ist die Hauptcode-Aktivität, die durch eine seitliche Navigationsleiste an das Fragment führen:

public class MainActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener, OnMapReadyCallback { 
private GoogleMap mMap; 
Button enobutt=(Button)findViewById(R.id.enobtn); 

SupportMapFragment sMapFragment; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    sMapFragment = SupportMapFragment.newInstance(); 
    sMapFragment.getMapAsync(this); 

    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 


    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(); 
     } 
    }); 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    drawer.setDrawerListener(toggle); 
    toggle.syncState(); 

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 

    android.app.FragmentManager fm = getFragmentManager(); 
    android.support.v4.app.FragmentManager rFm = getSupportFragmentManager(); 
    if(!sMapFragment.isAdded()) 
     rFm.beginTransaction().add(R.id.map, sMapFragment).commit(); 
    else 
     rFm.beginTransaction().show(sMapFragment).commit(); 



} 

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else { 
     super.onBackPressed(); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.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); 
} 

@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 

    android.app.FragmentManager fn = getFragmentManager(); 
    android.support.v4.app.FragmentManager sFm = getSupportFragmentManager(); 
    int id = item.getItemId(); 

    if(sMapFragment.isAdded()) 
     sFm.beginTransaction().hide(sMapFragment).commit(); 

    if (id == R.id.nav_camera) { 
     fn.beginTransaction().replace(R.id.content_frame, new ImportFragment()).commit(); 

    } else if (id == R.id.nav_gallery) { 
     if(!sMapFragment.isAdded()) 
     sFm.beginTransaction().add(R.id.map, sMapFragment).commit(); 
     else 
      sFm.beginTransaction().show(sMapFragment).commit(); 

    } else if (id == R.id.nav_slideshow) { 

    } else if (id == R.id.nav_manage) { 

    } else if (id == R.id.nav_share) { 

    } else if (id == R.id.nav_send) { 

    } 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 

@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap;} 

}

Wie kann ich tun?

+0

wenn Sie Aktivität von Fragmente zu ladende dann oncreate – sumit

+0

diesen Code in Ihrem Fragmente setzen, wenn die Schaltfläche Teil des Bruchstück xml ist –

+0

in Fragmenten auf Create den Code setzen kann Gibst du mir ein Beispiel für den Code? weil es nicht zu funktionieren scheint, aber vielleicht mache ich etwas falsch. Die Schaltfläche ist ein Teil des XML-Fragments ja .. genau – Eugae

Antwort

0

bearbeiten Ihr Fragment zu

public class ImportFragment extends Fragment { 
    ListView listView; 
    private Activity activity; 

    public ImportFragment(Activity activity) { 
     this.activity = activity; 
    }  

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

     return rootView; 

    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     Button btn1 = (Button) view.findViewById(R.id.btn1); 

     btn1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent intent = new Intent(activity, newactivity.class); 
       activity.startActivity(intent); 
       activity.finish(); 

      } 
     }); 
    } 
} 
+0

Es hat funktioniert, danke! Ich unterschrieb Ihre Frage als die richtige Frage .. das hat nicht funktioniert und hat einen Fehler gezeigt: public ImportFragment (Activity activity) { this.activity = activity; } , aber der Rest ist richtig – Eugae

0

wie dies tun .... Ich habe die Änderungen im Code

public class ImportFragment extends Fragment { 
ListView listView; 
@Nullable 
@Override 
enter code here 

Button butt1=(Button)findViewById(R.id.btn1); 

butt1.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
Intent int1=new Intent(MainActivity.this,newactivity.class); 
startActivity(int1); 
finish(); 
} 
}); 
return rootView; 
} 
} 
0

Sie einfach nur OnButtonClick in create hinzufügen müssen

und fügen Sie folgende Zeile

startActivity(new Intent(getActivity(), YourOtherActivity.class)); 
0

Sie stellen eine gute Frage, aber es ist ein Konzeptproblem und hängt ganz davon ab, was Sie tun möchten. Wenn Sie möchten, dass die Schaltflächenaktion im Fragment bei jeder Veröffentlichung dieses Fragments gleich ist, können Sie den OnClickListener in diesem Fragment belassen. Andernfalls setzen Sie es in die Aktivität mit einer Callback-Methode. (siehe callback doc)

Eine weitere bewährte Methode ist die Verwendung des MVP-Musters (Model View Presenter), um die Ansichten von der Logik zu trennen.

0

dies versuchen, es kann Ihnen helfen,

butt1.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    startActivity(new Intent(getActivity(), YourActivity.class)); 
} 
}); 
Verwandte Themen