1

Ich versuche über meine Schublade ein Menü aufzurufen, implementiert View.OnClickListener.Aufruf eines Fragments implementiert View.OnClickListener in einem Schubladenmenü

Hier der Hauptcode:

 package thyroid.com.thyroidmenu; 


import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ListView; 

public class MainActivity extends AppCompatActivity { 

private String[] mNavigationDrawerItemTitles; 
private DrawerLayout mDrawerLayout; 
private ListView mDrawerList; 
Toolbar toolbar; 
private CharSequence mDrawerTitle; 
private CharSequence mTitle; 
android.support.v7.app.ActionBarDrawerToggle mDrawerToggle; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mTitle = mDrawerTitle = getTitle(); 
    mNavigationDrawerItemTitles= getResources().getStringArray(R.array.navigation_drawer_items_array); 
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    mDrawerList = (ListView) findViewById(R.id.left_drawer); 

    setupToolbar(); 

    DataModel[] drawerItem = new DataModel[3]; 

    drawerItem[0] = new DataModel(R.drawable.connect, "Connect"); 
    drawerItem[1] = new DataModel(R.drawable.fixtures, "Fixtures"); 
    drawerItem[2] = new DataModel(R.drawable.table, "Table"); 
    drawerItem[3] = new DataModel(R.drawable.table, "Table"); 
    drawerItem[4] = new DataModel(R.drawable.fixtures, "Table"); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(false); 
    getSupportActionBar().setHomeButtonEnabled(true); 

    DrawerItemCustomAdapter adapter = new DrawerItemCustomAdapter(this, R.layout.list_view_item_row, drawerItem); 
    mDrawerList.setAdapter(adapter); 
    mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    mDrawerLayout.setDrawerListener(mDrawerToggle); 
    setupDrawerToggle(); 


} 

private class DrawerItemClickListener implements ListView.OnItemClickListener { 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     selectItem(position); 
    } 

} 

private void selectItem(int position) { 

    RegisterFragment fragment = null; 

    switch (position) { 
     case 0: 
      fragment = new ConnectFragment(); 
      break; 
     case 1: 
      fragment = new FixturesFragment(); 
      break; 
     case 2: 
      fragment = new TableFragment(); 
      break; 
     case 3: 
      fragment = new LoginFragment(); 
      break; 
     case 4: 
      fragment = new RegisterFragment(); 
      break; 

     default: 
      break; 
    } 

    if (fragment != null) { 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); 

     mDrawerList.setItemChecked(position, true); 
     mDrawerList.setSelection(position); 
     setTitle(mNavigationDrawerItemTitles[position]); 
     mDrawerLayout.closeDrawer(mDrawerList); 

    } else { 
     Log.e("MainActivity", "Error in creating fragment"); 
    } 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    if (mDrawerToggle.onOptionsItemSelected(item)) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

@Override 
public void setTitle(CharSequence title) { 
    mTitle = title; 
    getSupportActionBar().setTitle(mTitle); 
} 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    mDrawerToggle.syncState(); 
} 

void setupToolbar(){ 
    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayShowHomeEnabled(true); 
} 

void setupDrawerToggle(){ 
    mDrawerToggle = new android.support.v7.app.ActionBarDrawerToggle(this,mDrawerLayout,toolbar,R.string.app_name, R.string.app_name); 
    //This is necessary to change the icon of the Drawer Toggle upon state change. 
    mDrawerToggle.syncState(); 
} 

} 

Und da das Fragment Code, mit dem ich Problem:

package thyroid.com.thyroidmenu; 


import android.app.Fragment; 
import android.app.FragmentTransaction; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.support.design.widget.Snackbar; 
import android.support.v7.widget.AppCompatButton; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.EditText; 
import android.widget.ProgressBar; 
import android.widget.TextView; 


import retrofit2.Call; 
import retrofit2.Callback; 
import retrofit2.Retrofit; 
import retrofit2.converter.gson.GsonConverterFactory; 
import thyroid.com.thyroidmenu.models.ServerRequest; 
import thyroid.com.thyroidmenu.models.ServerResponse; 
import thyroid.com.thyroidmenu.models.User; 


public class LoginFragment extends Fragment implements View.OnClickListener{ 

private AppCompatButton btn_login; 
private EditText et_email,et_password; 
private TextView tv_register,tv_reset_password; 
private ProgressBar progress; 
private SharedPreferences pref; 


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

    View view = inflater.inflate(R.layout.fragment_login,container,false); 
    initViews(view); 
    return view; 
} 

private void initViews(View view){ 

    pref = getActivity().getPreferences(0); 

    btn_login = (AppCompatButton)view.findViewById(R.id.btn_login); 
    tv_register = (TextView)view.findViewById(R.id.tv_register); 
    tv_reset_password = (TextView)view.findViewById(R.id.tv_reset_password); 
    et_email = (EditText)view.findViewById(R.id.et_email); 
    et_password = (EditText)view.findViewById(R.id.et_password); 

    progress = (ProgressBar)view.findViewById(R.id.progress); 

    btn_login.setOnClickListener(this); 
    tv_register.setOnClickListener(this); 
    tv_reset_password.setOnClickListener(this); 
} 

@Override 
public void onClick(View view) { 

    switch (view.getId()){ 



     case R.id.tv_register: 
      goToRegister(); 
      break; 

     case R.id.btn_login: 
      String email = et_email.getText().toString(); 
      String password = et_password.getText().toString(); 

      if(!email.isEmpty() && !password.isEmpty()) { 

       progress.setVisibility(View.VISIBLE); 
       loginProcess(email,password); 

      } else { 

       Snackbar.make(getView(), "Fields are empty !", Snackbar.LENGTH_LONG).show(); 
      } 
      break; 
     case R.id.tv_reset_password: 
      goToResetPassword(); 
      break; 
    } 
} 
private void loginProcess(String email,String password){ 

    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(Constants.BASE_URL) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 

    RequestInterface requestInterface = retrofit.create(RequestInterface.class); 

    User user = new User(); 
    user.setEmail(email); 
    user.setPassword(password); 
    ServerRequest request = new ServerRequest(); 
    request.setOperation(Constants.LOGIN_OPERATION); 
    request.setUser(user); 
    Call<ServerResponse> response = requestInterface.operation(request); 

    response.enqueue(new Callback<ServerResponse>() { 
     @Override 
     public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) { 

      ServerResponse resp = response.body(); 
      Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show(); 

      if(resp.getResult().equals(Constants.SUCCESS)){ 
       SharedPreferences.Editor editor = pref.edit(); 
       editor.putBoolean(Constants.IS_LOGGED_IN,true); 
       editor.putString(Constants.EMAIL,resp.getUser().getEmail()); 
       editor.putString(Constants.NAME,resp.getUser().getName()); 
       editor.putString(Constants.UNIQUE_ID,resp.getUser().getUnique_id()); 
       editor.apply(); 
       goToProfile(); 

      } 
      progress.setVisibility(View.INVISIBLE); 
     } 

     @Override 
     public void onFailure(Call<ServerResponse> call, Throwable t) { 

      progress.setVisibility(View.INVISIBLE); 
      Log.d(Constants.TAG,"failed"); 
      Snackbar.make(getView(), t.getLocalizedMessage(), Snackbar.LENGTH_LONG).show(); 

     } 
    }); 
} 

private void goToResetPassword(){ 

    Fragment reset = new ResetPasswordFragment(); 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.replace(R.id.fragment_frame,reset); 
    ft.commit(); 
} 

private void goToRegister(){ 

    Fragment register = new RegisterFragment(); 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.replace(R.id.fragment_frame,register); 
    ft.commit(); 
} 

private void goToProfile(){ 

    Fragment profile = new ProfileFragment(); 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.replace(R.id.fragment_frame,profile); 
    ft.commit(); 
} 
} 

Da meine Fehler:

„Fehler: (81, 28) Fehler: Inkompatible Typen: LoginFragment kann nicht in RegisterFragment konvertiert werden " Wie könnte ich dieses Fragment aufrufen? Soll ich alles modifizieren?

+0

Welches Problem haben Sie genau? Stürzt die App ab? Passiert nichts? –

+0

@Malith-Fehleranzeige * edit thx – zouarv42

+0

Das Fragment, das Sie in der selectFragment() -Methode erstellen, muss ein RegisterFragment gemäß dem von Ihnen geposteten Code sein. Stellen Sie sicher, dass alle Klassen in der switch-Anweisung RegisterFragment erweitern. –

Antwort

0

Die falsche Sache ist, dass Sie versuchen, alle Ihre Fragmente zu RegisterFragment zu werfen, und sie erweitern diese Klasse nicht.

Sie sollten sie zu Fragment Stimmen:

private void selectItem(int position) { 

    Fragment fragment = null; 

    switch (position) { 
     case 0: 
      fragment = new ConnectFragment(); 
      break; 
     case 1: 
      fragment = new FixturesFragment(); 
      break; 
     case 2: 
      fragment = new TableFragment(); 
      break; 
     case 3: 
      fragment = new LoginFragment(); 
      break; 
     case 4: 
      fragment = new RegisterFragment(); 
      break; 

     default: 
      break; 
    } 

    ... 
} 
+0

Hallo Juan, thx für Ihre Antwort , Ich habe es geändert, aber ich habe immer noch das: "Fehler: (81, 28) Fehler: inkompatible Typen: LoginFragment kann nicht in Fragment konvertiert werden" ...;) – zouarv42

+0

Achten Sie darauf, dass Sie importieren importieren android.app .Fragment; '. Wahrscheinlich versuchen Sie, Support-Fragment zu verwenden –

+0

Ich kann nicht importieren "importieren android.support.v4.app.Fragment; in meinem LoginFragment". Das ist meine öffentliche Klasse in LoginFragment "öffentliche Klasse LoginFragment erweitert android.support.v4.app.Fragment implementiert View.OnClickListener {" Immer noch fiew Fehler ... – zouarv42