【问题标题】:How to link a button to other xml in Android?如何将按钮链接到Android中的其他xml?
【发布时间】:2014-05-25 02:32:35
【问题描述】:

如何在 Android 中链接按钮?

例如在首页有 2 个按钮:'Item1 & item2'

我需要输入代码,这样我才能单击“项目”按钮,然后将显示 Item1 数据...

这是我当前在 Activity.java 上的代码:

    package com.example.myshops;

    import java.text.SimpleDateFormat;
    import java.util.Calendar;

    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.FragmentManager;
    import android.app.FragmentTransaction;
    import android.app.ActionBar;
    import android.app.Fragment;
    import android.os.Bundle;
    import android.view.Gravity;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.Display;
    import android.view.WindowManager;
    import android.view.ViewGroup;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    import android.os.Build;

    public class MainActivity extends Activity implements OnClickListener  {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);



            FragmentManager fragmentManager=getFragmentManager();
            FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction(); 
            Home_fragment hf=new Home_fragment();
            fragmentTransaction.replace(android.R.id.content, hf);
            fragmentTransaction.commit();

            setContentView(R.layout.activity_main);

            Button item1Click = (Button)findViewById(R.id.Item1Button);
            itemClick1.setOnClickListener(this);

            Button item2Click = (Button)findViewById(R.id.Item2Button);
            itemClick2.setOnClickListener(this);

            Button item3Click = (Button)findViewById(R.id.Item3Button);
            itemClick3.setOnClickListener(this);


            Calendar c = Calendar.getInstance();
            System.out.println("Current time => "+c.getTime());

            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String formattedDate = df.format(c.getTime());
            // formattedDate have current date/time
            Toast.makeText(this, formattedDate, Toast.LENGTH_SHORT).show();


          // Now we display formattedDate value in TextView
            TextView txtView = new TextView(this);
            txtView.setText("Current Date and Time : "+formattedDate);
            txtView.setGravity(Gravity.CENTER);
            txtView.setTextSize(20);
            setContentView(txtView);


        }

        @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;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
            if (id == R.id.action_settings) {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }

        /**
         * A placeholder fragment containing a simple view.
         */

        public static class PlaceholderFragment extends Fragment {

            public PlaceholderFragment() {
            }

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



            public void item1Click(View view) {
                FragmentManager fragmentManager=getFragmentManager();
                FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();     
                Item1_fragment hf=new Item1_fragment();
                fragmentTransaction.replace(android.R.id.content, hf);
                fragmentTransaction.commit();
            }   


        }

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub


 switch(v.getId())
      {
       case R.id.Item1Button:

         break;
       case R.id.Item2Button:

         break;
       case R.id.Item3Button:

         break;     
       }

        }


        }

我的 home.xml(例如):

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.example.myshops.MainActivity"
        tools:ignore="MergeRootFrame" >

        <Button
            android:id="@+id/Item2Button"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/Item2Button"
            android:onClick="item2Click"
            android:text="@string/Item2" />

        <Button
            android:id="@+id/Item3Button"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/Item2Button"
            android:onClick="item3Click"
            android:text="@string/Item3" />


        <Button
            android:id="@+id/Item1Button"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:onClick="item1Click"
            android:text="@string/Item1" />

        <Button
            android:id="@+id/PrevButton"
            android:layout_width="110dp"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:text="@string/Previous" />

        <Button
            android:id="@+id/HomeButton"
            android:layout_width="110dp"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:text="@string/Home" />

        <Button
            android:id="@+id/NextButton"
            android:layout_width="85dp"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:text="@string/Next" />



    </RelativeLayout>

我的日志中的错误:

04-11 15:56:54.915: D/dalvikvm(547): Not late-enabling CheckJNI (already on)
04-11 15:56:56.145: D/AndroidRuntime(547): Shutting down VM
04-11 15:56:56.155: W/dalvikvm(547): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
04-11 15:56:56.165: E/AndroidRuntime(547): FATAL EXCEPTION: main
04-11 15:56:56.165: E/AndroidRuntime(547): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.s0237600_diary/com.example.myshops.MainActivity}: java.lang.NullPointerException
04-11 15:56:56.165: E/AndroidRuntime(547):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
04-11 15:56:56.165: E/AndroidRuntime(547):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
04-11 15:56:56.165: E/AndroidRuntime(547):  at android.app.ActivityThread.access$600(ActivityThread.java:122)
04-11 15:56:56.165: E/AndroidRuntime(547):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
04-11 15:56:56.165: E/AndroidRuntime(547):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-11 15:56:56.165: E/AndroidRuntime(547):  at android.os.Looper.loop(Looper.java:137)
04-11 15:56:56.165: E/AndroidRuntime(547):  at android.app.ActivityThread.main(ActivityThread.java:4340)
04-11 15:56:56.165: E/AndroidRuntime(547):  at java.lang.reflect.Method.invokeNative(Native Method)
04-11 15:56:56.165: E/AndroidRuntime(547):  at java.lang.reflect.Method.invoke(Method.java:511)
04-11 15:56:56.165: E/AndroidRuntime(547):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-11 15:56:56.165: E/AndroidRuntime(547):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-11 15:56:56.165: E/AndroidRuntime(547):  at dalvik.system.NativeStart.main(Native Method)
04-11 15:56:56.165: E/AndroidRuntime(547): Caused by: java.lang.NullPointerException
04-11 15:56:56.165: E/AndroidRuntime(547):  at com.example.myshops.MainActivity.onCreate(MainActivity.java:44)
04-11 15:56:56.165: E/AndroidRuntime(547):  at android.app.Activity.performCreate(Activity.java:4465)
04-11 15:56:56.165: E/AndroidRuntime(547):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
04-11 15:56:56.165: E/AndroidRuntime(547):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
04-11 15:56:56.165: E/AndroidRuntime(547):  ... 11 more
04-11 15:56:58.955: I/Process(547): Sending signal. PID: 547 SIG: 9
04-11 15:57:02.035: D/AndroidRuntime(565): Shutting down VM
04-11 15:57:02.035: W/dalvikvm(565): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
04-11 15:57:02.055: E/AndroidRuntime(565): FATAL EXCEPTION: main
04-11 15:57:02.055: E/AndroidRuntime(565): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myshops/com.example.myshops.MainActivity}: java.lang.NullPointerException
04-11 15:57:02.055: E/AndroidRuntime(565):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
04-11 15:57:02.055: E/AndroidRuntime(565):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
04-11 15:57:02.055: E/AndroidRuntime(565):  at android.app.ActivityThread.access$600(ActivityThread.java:122)
04-11 15:57:02.055: E/AndroidRuntime(565):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
04-11 15:57:02.055: E/AndroidRuntime(565):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-11 15:57:02.055: E/AndroidRuntime(565):  at android.os.Looper.loop(Looper.java:137)
04-11 15:57:02.055: E/AndroidRuntime(565):  at android.app.ActivityThread.main(ActivityThread.java:4340)
04-11 15:57:02.055: E/AndroidRuntime(565):  at java.lang.reflect.Method.invokeNative(Native Method)

【问题讨论】:

  • 你能再解释一下你真正想做的事吗
  • 这很简单。实现 Item1Button 点击​​事件并在 onclick Item1Button 中获取数据并设置为 Text to Item2Button
  • @Sreekanthss 主页上有 3 个按钮,如果单击按钮,我想显示 item1 内的内容...但是所有按钮都不起作用,甚至最糟糕的是应用程序总是无法运行(当我双击应用程序时,它停止了)
  • 您可以尝试为按钮编写点击视图吗?
  • 如果您遇到任何错误,请同时发布您的 logcat 错误。

标签: java android xml button hyperlink


【解决方案1】:

您应该在代码中或在 xml 中定义点击侦听器,而不是同时定义两者。删除其中一个,另一个应该可以工作。

【讨论】:

  • 从所有这些中删除这一行 android:onClick="item3Click"
  • 只是每个 xml 中的 onclick 行?
  • Yes.. 你应该在 onclick 方法中点击按钮。
  • 等你说我应该删除 onClick .. 那么在 onclick 方法中单击按钮是什么意思?对不起,我很困惑
  • 您已在代码中将侦听器设置为“this”。所以你应该在你覆盖的 onclick 方法中点击按钮。
【解决方案2】:

使用

Onclicklistener 喜欢

 Button item1Click = (Button)findViewById(R.id.Item1Button);

 item1Click.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

        }
    };

其他按钮也一样

【讨论】:

    【解决方案3】:

    这样做

        @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        //check here that to which view does v match for example
        if(v==item1Click)
            {
                //then do something
            }
    } 
    

    否则你可以删除实现的东西并为每个按钮创建单独的侦听器,如 raj 所述

    【讨论】:

      【解决方案4】:

      使用单击侦听器访问您所有的Button 点击侦听器,并使用按钮的 id 并实现每个点击事件,如下所示:

       @Override
      public void onClick(View v) {
          // TODO Auto-generated method stub
      
        switch(v.getId())
        {
         case R.id.Item1Button:
           //write your logic
           break;
         case R.id.Item2Button:
           //write your logic
           break;
         case R.id.Item3Button:
           //write your logic
           break;     
         }
      }
      

      【讨论】:

      • @GrlsHu 现在的问题是我无法运行我的应用程序...这是我从调试中发现的错误:} catch (Exception e) { if (!mInstrumentation.onException(activity, e )) { throw new RuntimeException("无法启动活动 " + component + ": " + e.toString(), e);
      • 请在您的问题@user3514625中发布您的完整logcat
      • @user3514625 你为什么还要在setContentView(txtView); 行中使用TextView 设置布局。如果您再次设置布局,那么您将无法再访问您的按钮,因为您已经更改了布局。
      • 即使在我删除它之后我仍然无法运行应用程序......也无法复制我的 logcat..
      • 对于 //write your logic 部分我也不懂,你想让我在那里输入代码吗?因为我在编程方面不是那么好..
      【解决方案5】:

      我说的是解决问题的一种方法,还有其他方法可以解决问题

      <Button
              android:id="@+id/Item3Button"
              android:layout_width="200dp"
              android:layout_height="wrap_content"
              android:layout_alignParentLeft="true"
              android:layout_alignParentRight="true"
              android:layout_below="@+id/Item2Button"
              android:onClick="item3Click"
              android:text="@string/Item3" />
      

      你在这里写了android:onClick="item3Click",对于所有按钮,

      所以在jave代码中你可以这样写

       public void item3Click(View view){
      
          //what ever you want to do in the button 3 click 
          }
       public void item2Click(View view){
      
          //what ever you want to do in the button 2 click 
          }
       public void item1Click(View view){
      
          //what ever you want to do in the button 1 click 
          }
      

      对所有按钮重复相同的操作,

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-10
        • 1970-01-01
        • 2013-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-13
        • 2015-07-27
        相关资源
        最近更新 更多