2015-05-29 92 views
-5

我创建了一个简单的应用程序,当我点击日历图像按钮时显示日历,如果我选择某个日期表示它放置在文本框中。我写了代码,但出现错误,其中onClick函数是select Date。Error findViewById()

代码:

MainActivity.java

package com.h2o; 

import android.app.Activity; 

import java.text.DateFormat; 
import java.util.ArrayList; 
import java.util.Calendar; 
import java.util.List; 

import android.app.DatePickerDialog; 
import android.app.Dialog; 
import android.support.v4.app.DialogFragment; 
import android.os.Bundle; 

import android.app.Fragment; 
import android.app.FragmentManager; 
import android.content.res.Configuration; 
import android.support.annotation.Nullable; 
import android.support.v4.app.ActionBarDrawerToggle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.DatePicker; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.Toast; 


public class MainActivity extends FragmentActivity { 

    private DrawerLayout mDrawerLayout; 
    private ListView mDrawerList; 
    private ActionBarDrawerToggle mDrawerToggle; 

    private CharSequence mDrawerTitle; 
    private CharSequence mTitle; 
    CustomDrawerAdapter adapter; 

    List<DrawerItem> dataList; 
    EditText mEdit; 





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


     // Initializing 
     dataList = new ArrayList<DrawerItem>(); 
     mTitle = mDrawerTitle = getTitle(); 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerList = (ListView) findViewById(R.id.left_drawer); 

     mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, 
       GravityCompat.START); 

     // Add Drawer Item to dataList 
     dataList.add(new DrawerItem(true)); // adding a spinner to the list - 0 

     dataList.add(new DrawerItem("Wallet")); // adding a header to the list - 1 
     dataList.add(new DrawerItem("Balance", R.drawable.ic_balance)); // - 2 


     dataList.add(new DrawerItem("Profile"));// adding a header to the list - 3 
     dataList.add(new DrawerItem("Personal", R.drawable.ic_account)); 
     dataList.add(new DrawerItem("Work", R.drawable.ic_account)); 
     dataList.add(new DrawerItem("Address", R.drawable.ic_account)); 
     dataList.add(new DrawerItem("Vehicle", R.drawable.ic_car)); 
     dataList.add(new DrawerItem("Preference", R.drawable.ic_pref)); 


     dataList.add(new DrawerItem("Other Option")); // adding a header to the list 
     dataList.add(new DrawerItem("About", R.drawable.ic_action_about)); 
     dataList.add(new DrawerItem("Settings", R.drawable.ic_action_settings)); 
     dataList.add(new DrawerItem("Help", R.drawable.ic_action_help)); 

     adapter = new CustomDrawerAdapter(this, R.layout.custom_drawer_item, 
       dataList); 

     mDrawerList.setAdapter(adapter); 

     mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 

     getActionBar().setDisplayHomeAsUpEnabled(true); 
     getActionBar().setHomeButtonEnabled(true); 

     mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, 
       R.drawable.ic_drawer, R.string.drawer_open, 
       R.string.drawer_close) { 
      public void onDrawerClosed(View view) { 
       getActionBar().setTitle(mTitle); 
       invalidateOptionsMenu(); // creates call to 
       // onPrepareOptionsMenu() 
      } 

      public void onDrawerOpened(View drawerView) { 
       getActionBar().setTitle(mDrawerTitle); 
       invalidateOptionsMenu(); // creates call to 
       // onPrepareOptionsMenu() 
      } 
     }; 

     mDrawerLayout.setDrawerListener(mDrawerToggle); 


    } 


    public void selectDate(View view) { 
     DialogFragment newFragment = new SelectDateFragment(); 
     newFragment.show(getSupportFragmentManager(), "DatePicker"); 
    } 


    /* public void doDatePicker(View view) { 
     DialogFragment myDatePickerFragment = new MyDatePickerFragment(); 
     myDatePickerFragment.show(getSupportFragmentManager(), "datePicker"); 
    }*/ 
    @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; 
    } 

    public void SelectItem(String item, int possition) { 
     Fragment fragment = null; 
     Bundle args = new Bundle(); 

     switch(item) { 
      case "Balance": fragment = new BalanceFragment(); break; 
      case "Personal": fragment = new PersonalFragment(); break; 
      case "Work": fragment = new WorkFragment(); break; 
      case "Address": fragment = new AddressFragment(); break; 
      case "Vehicle": fragment = new VehicleFragment(); break; 
      case "Preference": fragment = new PreferenceFragment(); break; 
      case "About": fragment = new AboutFragment(); break; 
      case "Settings": fragment = new SettingsFragment(); break; 
      case "Help": fragment = new HelpFragment(); break; 
      default: fragment = new DefaultFragment(); break; 
     } 

     fragment.setArguments(args); 
     FragmentManager frgManager = getFragmentManager(); 
     frgManager.beginTransaction().replace(R.id.content_frame, fragment) 
       .commit(); 

     mDrawerList.setItemChecked(possition, true); 
     setTitle(dataList.get(possition).getItemName()); 
     mDrawerLayout.closeDrawer(mDrawerList); 


    } 




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

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     // Sync the toggle state after onRestoreInstanceState has occurred. 
     mDrawerToggle.syncState(); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     // Pass any configuration change to the drawer toggles 
     mDrawerToggle.onConfigurationChanged(newConfig); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // The action bar home/up action should open or close the drawer. 
     // ActionBarDrawerToggle will take care of this. 
     if (mDrawerToggle.onOptionsItemSelected(item)) { 
      return true; 
     } 

     return false; 
    } 

    private class DrawerItemClickListener implements 
      ListView.OnItemClickListener { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, 
           long id) { 
      if (dataList.get(position).getTitle() == null) { 
       SelectItem(dataList.get(position).getItemName(), position); 
      } 
     } 
    } 


} 

SelectDateFragment.java

package com.h2o; 

import android.app.DatePickerDialog; 
import android.app.Dialog; 
import android.os.Bundle; 
import android.support.v4.app.DialogFragment; 
import android.widget.DatePicker; 
import android.widget.EditText; 

import java.util.Calendar; 

public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener 
{ 
    EditText mEdit; 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     final Calendar calendar = Calendar.getInstance(); 
     int yy = calendar.get(Calendar.YEAR); 
     int mm = calendar.get(Calendar.MONTH); 
     int dd = calendar.get(Calendar.DAY_OF_MONTH); 
     return new DatePickerDialog(getActivity(), this, yy, mm, dd); 
    } 

    public void onDateSet(DatePicker view, int yy, int mm, int dd) { 
     populateSetDate(yy, mm+1, dd); 
    } 
    public void populateSetDate(int year, int month, int day) { 
     mEdit = (EditText)findViewById(R.id.dobText); 
     mEdit.setText(month + "/" + day + "/" + year); 
    } 
} 

我得到一个错误findViewById()。我正在使用Android Studio而不是Eclipse。

+2

什么是你所得到 –

+1

错误,请发布logcat。 – Kishore

+0

不能解析方法findViewById在SelectDateFragment.java – appu

回答

1

如果没有ViewParent,假设您绑定的mDrawerLayout对布局具有视图父项,但无法绑定组件,但在SelectDateFragment中,您没有视图来绑定它。

EditText mEdit = (EditText)yourview.findViewById(R.id.dobText); 
1

如果您正在使用片段,则不能直接使用findviewbyid()。所以用这个

public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
{ 
    // TODO Auto-generated method stub 

    v=inflater.inflate(R.layout.login_activity, container, false); 

    btn_login=(Button)v.findViewById(R.id.btn_login); 
    return v; 
    } 
1

试试这个
在此,你需要创建一个视图,然后,如果你需要添加任何东西使用视图

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

      View rootView = inflater.inflate(R.layout.player, container, false); 

      // All player buttons 
      btnPlay = (ImageButton) rootView.findViewById(R.id.btnPlay); 
    return rootView;