findViewById()出错

时间:2015-05-29 06:09:07

标签: android android-dialogfragment

我创建了简单的应用程序,我想要的是,当我点击日历图像按钮显示日历时,如果我选择某个日期意味着它放在文本框中。我写了代码,但是我收到一个错误,其中onClick函数是select Date。

代码:

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。

3 个答案:

答案 0 :(得分:1)

你不能在没有 ViewParent 的情况下绑定组件,假设你绑定了具有viewparent的mDrawerLayout到布局,但在SelectDateFragment中你没有绑定它的视图。

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

答案 1 :(得分: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;
    }

答案 2 :(得分: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;