2015-09-29 39 views
0

我已經在線排序了許多解決方案,但似乎沒有工作。當我在選項卡片段內聲明一個按鈕時,我的應用程序在舉行活動開始前崩潰,請幫助我。這是我的代碼。ANdroid中的標籤內的片段中的按鈕

//this is the code for the containing activity with tabs 
public class Dashboard extends FragmentActivity implements ActionBar.TabListener{ 
private Context ctx = this; 
ActionBar AB; 
ViewPager VP; 
FragmentPageAdapter FP; 
String note, timestamp; 
EditText NOTE; 
Button save; 

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

    Intent intent = getIntent(); 
    String name = intent.getStringExtra("u_name"); 

    VP = (ViewPager) findViewById(R.id.pager); 
    FP = new FragmentPageAdapter(getSupportFragmentManager()); 

    AB = getActionBar(); 
    VP.setAdapter(FP); 
    AB.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    AB.addTab(AB.newTab().setText("Notes").setTabListener(this)); 
    AB.addTab(AB.newTab().setText("Contacts").setTabListener(this)); 
    AB.addTab(AB.newTab().setText("Schedular").setTabListener(this)); 

    Toast.makeText(getBaseContext(), "welcome " + name, Toast.LENGTH_LONG).show(); 

    VP.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

     @Override 
     public void onPageSelected(int arg0) { 
      AB.setSelectedNavigationItem(arg0); 

     } 

     @Override 
     public void onPageScrolled(int arg0, float arg1, int arg2) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onPageScrollStateChanged(int arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.dashboard, menu); 
    return true; 
} 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle item selection 
    switch (item.getItemId()) { 
    case R.id.item_change: 
     change_password(); 
     return true; 
    case R.id.item_burn: 
     burn_diary(); 
     return true; 
    case R.id.item_exit: 
     exit(); 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 
public void burn_diary() { 
    Button burn, cancel; 
    final EditText DIALOG_USER; 
    final EditText DIALOG_PASS; 
    final Dialog custom = new Dialog(this); 

    custom.setTitle("Burn Diary"); 
    custom.setContentView(R.layout.dialog_burn); 


    DIALOG_USER = (EditText) custom.findViewById(R.id.burn_username); 
    DIALOG_PASS = (EditText) custom.findViewById(R.id.burn_password); 

    burn = (Button) custom.findViewById(R.id.burn); 
    cancel = (Button) custom.findViewById(R.id.cancel); 
    burn.setOnClickListener(new OnClickListener(){ 
     Intent intent = getIntent(); 
     String name = intent.getStringExtra("u_name"); 

     @Override 
     public void onClick(View arg0) { 
      String dialog_user = DIALOG_USER.getText().toString(); 
      String dialog_pass = DIALOG_PASS.getText().toString(); 

      DatabaseOperations DOP = new DatabaseOperations(ctx); 
      Cursor CR = DOP.getInformation(DOP); 
      CR.moveToFirst(); 
      boolean burnStatus = false; 
      do 
      { 
       if (dialog_user.equals(CR.getString(0)) && dialog_pass.equals(CR.getString(1)) && !(dialog_user.equals("") || dialog_pass.equals("")) && name.equals(dialog_user)) 
       { 
        burnStatus = true; 
       } 
      }while(CR.moveToNext()); 
      if (burnStatus == true) 
      { 
       DOP.deleteUser(DOP, dialog_user, dialog_pass); 
       Toast.makeText(getBaseContext(), "diary burnt successful", Toast.LENGTH_SHORT).show(); 
       finish(); 
      } 
      else 
      { 
       if((dialog_user.equals("") || dialog_pass.equals(""))) 
       { 
        Toast.makeText(getBaseContext(), "complete all fields", Toast.LENGTH_SHORT).show(); 
       } 
       else 
       { 
        Toast.makeText(getBaseContext(), "burn diary fail", Toast.LENGTH_SHORT).show(); 
        DIALOG_USER.setText(""); 
        DIALOG_PASS.setText(""); 
       } 

      } 
     } 
    }); 

    cancel.setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View arg0) { 
      custom.dismiss(); 
     } 
    }); 
    custom.show(); 
} 
public void change_password() { 
    Button change, cancel; 
    final EditText DIALOG_CURRENTPASS, DIALOG_NEWPASS; 
    final Dialog custom = new Dialog(this); 

    custom.setTitle("Change Password"); 
    custom.setContentView(R.layout.dialog_change); 

    DIALOG_CURRENTPASS = (EditText) custom.findViewById(R.id.change_currentPassword); 
    DIALOG_NEWPASS = (EditText) custom.findViewById(R.id.change_newPassword); 

    change = (Button) custom.findViewById(R.id.button_change); 
    cancel = (Button) custom.findViewById(R.id.button_cancel); 
    change.setOnClickListener(new OnClickListener(){ 
     Intent intent = getIntent(); 
     String name = intent.getStringExtra("u_name"); 

     @Override 
     public void onClick(View arg0) { 
      String current_pass = DIALOG_CURRENTPASS.getText().toString(); 
      String new_pass = DIALOG_NEWPASS.getText().toString(); 

      DatabaseOperations DOP = new DatabaseOperations(ctx); 
      Cursor CR = DOP.getInformation(DOP); 
      CR.moveToFirst(); 
      boolean changeStatus = false; 
      do 
      { 
       if (current_pass.equals(CR.getString(1)) && !(current_pass.equals("") || new_pass.equals("")) && !(current_pass.equals(new_pass)) && name.equals(CR.getString(0))) 
       { 
        changeStatus = true; 
       } 
      }while(CR.moveToNext()); 
      if (changeStatus == true) 
      { 
       DOP.updatePassword(DOP, name, current_pass, new_pass); 
       Toast.makeText(getBaseContext(), "credentials change successful", Toast.LENGTH_SHORT).show(); 
       custom.dismiss(); 
      } 
      else 
      { 

      } 
     } 

    }); 
    cancel.setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View arg0) { 
      custom.dismiss(); 
     } 

    }); 
    custom.show(); 
} 
private void exit() 
{ 
    Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    intent.putExtra("EXIT", true); 
    startActivity(intent); 
} 

@Override 
public void onTabReselected(Tab arg0, FragmentTransaction arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onTabSelected(Tab arg0, FragmentTransaction arg1) { 
    VP.setCurrentItem(arg0.getPosition()); 

} 

@Override 
public void onTabUnselected(Tab arg0, FragmentTransaction arg1) { 
    // TODO Auto-generated method stub 

} 

}

//this the code for the fragment adapter 
public class FragmentPageAdapter extends FragmentPagerAdapter { 

public FragmentPageAdapter(FragmentManager fm) { 
    super(fm); 
    // TODO Auto-generated constructor stub 
} 

@Override 
public Fragment getItem(int arg0) { 
    switch (arg0) 
    { 
    case 0: 
     return new NoteFragment(); 
    case 1: 
     return new ContactFragment(); 
    case 2: 
     return new SchedulerFragment(); 
    default: 
     break; 
    } 
    return null; 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return 3; 
} 

}

//this is the code for the first tab fragment 
public class NoteFragment extends Fragment{ 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    View v; 
    v = inflater.inflate(R.layout.notelayout, container, false); 
    Button save = (Button) v.findViewById(R.id.saveButton); 
    save.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      //Implement the code to run on button click here 
     } 
    }); 
    return v; 
} 

}

//this is the code for the second tab fragment 
public class ContactFragment extends Fragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    return inflater.inflate(R.layout.contactlayout, container, false); 
} 

}

//this this the code for the third tab fragment 
public class SchedulerFragment extends Fragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    return inflater.inflate(R.layout.schedulerlayout, container, false); 
} 

}

//this is the code for the first tab fragment xml 
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 
<EditText 
    android:id="@+id/note" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignTop="@+id/saveButton" 
    android:layout_toLeftOf="@+id/saveButton" 
    android:ems="10" 
    android:hint="type a note" 
    android:paddingBottom="1dp" /> 

<ImageButton 
    android:id="@+id/saveButton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 
    android:src="@drawable/ic_action_name" /> 

<ListView 
    android:id="@+id/noteView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/note" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" > 
</ListView> 
</RelativeLayout> 

這裏是logcat的

09-29 20:58:51.403: D/Databsse operations(797): Database created 
09-29 20:58:53.202: D/Databsse operations(797): One row inserted 
09-29 20:58:54.271: D/gralloc_goldfish(797): Emulator without GPU emulation detected. 
09-29 21:00:07.152: D/dalvikvm(797): GC_CONCURRENT freed 67K, 7% free 2719K/2908K, paused 82ms+22ms, total 561ms 
09-29 21:00:07.492: I/Choreographer(797): Skipped 53 frames! The application may be doing too much work on its main thread. 
09-29 21:00:26.392: D/Databsse operations(797): Database created 
09-29 21:00:26.501: D/Databsse operations(797): Table combed 
09-29 21:00:26.722: I/Choreographer(797): Skipped 43 frames! The application may be doing too much work on its main thread. 
09-29 21:00:27.552: D/dalvikvm(797): GC_FOR_ALLOC freed 187K, 10% free 2894K/3204K, paused 111ms, total 122ms 
09-29 21:00:27.602: I/dalvikvm-heap(797): Grow heap (frag case) to 3.547MB for 635812-byte allocation 
09-29 21:00:27.893: D/dalvikvm(797): GC_FOR_ALLOC freed 2K, 9% free 3512K/3828K, paused 294ms, total 295ms 
09-29 21:00:28.192: D/dalvikvm(797): GC_CONCURRENT freed 34K, 9% free 3512K/3828K, paused 9ms+65ms, total 300ms 
09-29 21:00:29.062: D/AndroidRuntime(797): Shutting down VM 
09-29 21:00:29.082: W/dalvikvm(797): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 
09-29 21:00:29.272: E/AndroidRuntime(797): FATAL EXCEPTION: main 
09-29 21:00:29.272: E/AndroidRuntime(797): java.lang.ClassCastException: android.widget.ImageButton cannot be cast to android.widget.Button 
09-29 21:00:29.272: E/AndroidRuntime(797): at com.example.databank.NoteFragment.onCreateView(NoteFragment.java:17) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.support.v4.view.ViewPager.populate(ViewPager.java:1011) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.support.v4.view.ViewPager.populate(ViewPager.java:880) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1374) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.view.View.measure(View.java:15518) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.view.View.measure(View.java:15518) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.widget.LinearLayout.measureVertical(LinearLayout.java:847) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.view.View.measure(View.java:15518) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
09-29 21:00:29.272: E/AndroidRuntime(797): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2176) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.view.View.measure(View.java:15518) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1874) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1089) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1265) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.view.Choreographer.doCallbacks(Choreographer.java:562) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.view.Choreographer.doFrame(Choreographer.java:532) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.os.Handler.handleCallback(Handler.java:725) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.os.Handler.dispatchMessage(Handler.java:92) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.os.Looper.loop(Looper.java:137) 
09-29 21:00:29.272: E/AndroidRuntime(797): at android.app.ActivityThread.main(ActivityThread.java:5041) 
09-29 21:00:29.272: E/AndroidRuntime(797): at java.lang.reflect.Method.invokeNative(Native Method) 
09-29 21:00:29.272: E/AndroidRuntime(797): at java.lang.reflect.Method.invoke(Method.java:511) 
09-29 21:00:29.272: E/AndroidRuntime(797): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
09-29 21:00:29.272: E/AndroidRuntime(797): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
09-29 21:00:29.272: E/AndroidRuntime(797): at dalvik.system.NativeStart.main(Native Method) 
+3

粘貼在崩潰的細節也請:-) – JoeyJubb

+0

我已經添加LogCats –

回答

0

在NoteFragment,你想投的ImageButton的一個按鈕。

儘管名稱,ImageButton不是Button的子類,它實際上擴展了ImageView。

你行改成這樣:

ImageButton save = (ImageButton) v.findViewById(R.id.saveButton); 

或者,哪怕只是這個,如果你不打算更改圖標或任何東西:

View save = v.findViewById(R.id.saveButton); 
+0

第一個解決方案工作正常。應用程序不會粉碎了。非常感謝 –

0

在你NoteFragment#onCreateView方法具有一行: Button save = (Button) v.findViewById(R.id.saveButton); and in notelayout.xml R.id.saveButton引用ImageButton, 或許你認爲Button是ImageButton的超類, 但是實際上並非如the Android ImageButton doc所示, ImagButton的超類是ImageView,所以拋出ClassCastException。 然後更改save的類型從ButtonImageButton,您的代碼將工作。