Android按钮点击问题

时间:2014-03-02 01:05:04

标签: android buttonclick

您好我有理解为什么这不起作用的问题。我有一个按钮,当你点击它时它不会进入新的活动。我试图只需要一个简单的按钮点击即可转到另一个活动,该活动上面有一个片段。

我点击事件的代码如下:

public class PlanMeMainFragment extends Fragment {

    private Button mNewButton, mExistingButton;

        mNewButton = (Button)v.findViewById(R.id.new_event_button);
        mNewButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ((PlanMeMainActivity) getActivity()).newActivityToLaunch(1);

            }
        });
        return  v;
    }
}

我的活动

public class PlanMeMainActivity extends FragmentActivity {

    @Override
    public void onCreate(Bundle savedInstanceState){
      super.onCreate(savedInstanceState);
      setContentView(R.layout.planme_main_fragment);
    }

    public void newActivityToLaunch(int i) {
        Intent myIntent;
        switch(i){
        case 1: myIntent = new Intent(PlanMeMainActivity.this, NewEventSetupActivity.class);
        }

        startActivity(myIntent);
    }
}

我列出了清单:

<activity
    android:name="com.pctoolman.planme.app.PlanMeMainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity
    android:name="com.pctoolman.planme.app.NewEventSetupActivity"
    android:label="@string/setup">
</activity>

3 个答案:

答案 0 :(得分:1)

尝试别的,回答@vdisawar给我的想法:

片段中的

// in your onClick method  
// call a method in your Activity 
((PlanMeMainActivity) getActivity()).newActivityToLaunch(); 
FragmentActivity中的

// newActivityToLaunch method  
public void newActivityToLaunch() {
    Intent myIntent = new Intent(PlanMeMainActivity.this, NewEventSetupActivity.class);
    startActivity(myIntent);
}  

通过这个技巧,你可以用不同的片段用相同的方法调用不同的活动,让我们看一个简单的例子:

FragmentA想要启动Activity1:

// call a method with an integer 
((MainActivity) getActivity()).newActivityToLaunch(1);  

在另一个片段(FragmentB)中,这个想要启动Activity2:

// call the same method with another integer 
((MainActivity) getActivity()).newActivityToLaunch(2);  

然后在你的FragmentActivity中,方法是:

// newActivityToLaunch method  
public void newActivityToLaunch(int i) {
    // create a general intent
    Intent myIntent = null;
    // switch i received from fragments
    switch(i) {
        // received from FragmentA
        case 1: myIntent = new Intent(MainActivity.this, Activity1.class);
        // received from FragmentB
        case 2: myIntent = new Intent(MainActivity.this, Activity2.class);
    }
    // start the activity
    startActivity(myIntent);
}  

希望这有帮助。

答案 1 :(得分:0)

尝试更改此内容:

<activity 
   android:name="com.pctoolman.planme.app.NewEventSetupActivity"
   android:label="@string/setup">
</activity>

到此:

<activity
    android:name="com.pctoolman.planme.app.NewEventSetupActivity"
    android:label="@string/setup">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

答案 2 :(得分:0)

您应该在Fragment类中创建一个接口,并在片段膨胀的活动中实现该接口。这样,当您在活动中单击按钮时,将在片段中的onClick方法中调用接口方法,并将在您的活动中执行该接口方法的代码。在这种情况下,您的方法将启动一个意图。

第1步:在片段类中创建接口

public interface OnFragmentInteractionListener {
    public void onFragmentInteraction();
}

第2步:为片段类

中的接口创建变量
private OnFragmentInteractionListener mListener;

第3步:通过覆盖onAttach方法并确保侦听器在片段活动中实现来初始化侦听器

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    try {
        mListener = (OnFragmentInteractionListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

第4步:处理片段类中的onClick方法

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

    mNewButton = (Button)v.findViewById(R.id.new_event_button);
    mNewButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mListener.onFragmentInteraction(); // executes this method in the activity
        }
    });
    return  v;
}

第5步:在您的活动中实施界面

public MainActivity extends Activity implements 
          PlanMeMainFragment.OnFragmentInteractionListener

覆盖活动中的界面方法

public void onFragmentInteraction(){
    Intent intent = new Intent(this, NewEventSetupActivity.class);
    startActivity(intent);
}

第7步:分离片段类中的侦听器

@Override
public void onDetach() {
    super.onDetach();
    mListener = null;
}

有关详细信息,请参阅Android培训课程 Communicating with Other Fragments