如何在片段中实现按钮SetOnClickListener?

艾莉亚

我正在做一个小项目,我想使用“滑块菜单”。长话短说,我碰巧在某些网站上使用抽屉找到了一个滑块菜单的源代码,并且在我的设备上效果很好。但是,我将以前的活动迁移到此滑块菜单时有些困惑,因为它们对listView上的每个项目都使用片段。

为了简单起见,我想迁移一个能够执行Ping功能的活动。它的xml文件由一个EditText,一个Button和一个TextView组成,用于显示输出。

现在,我确实设法“成功”地将该活动迁移到此片段中。抽屉运行良好,但是我卡住了,因为单击ping按钮后,应用程序始终会强制关闭。

PS:我还没有更改班级名称,对不起

下面是我的代码:

这是我最初的Ping活动:

package my.jlm;

import java.io.IOException;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


public class Ping extends Activity {
    EditText edit;
    TextView text;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_ping);
    edit = (EditText)findViewById(R.id.editText1);
    edit.setText("192.168.1.1");
    text = (TextView)findViewById(R.id.textView1);
    Button button = (Button)findViewById(R.id.button1);
    button.setOnClickListener(new View.OnClickListener() {

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

    Editable host = edit.getText();
    try {
    String pingCmd = "ping -c 5 " + host;
    String pingResult = "";
    Runtime r = Runtime.getRuntime();
    Process p = r.exec(pingCmd);
    BufferedReader in = new BufferedReader(new
    InputStreamReader(p.getInputStream()));
    String inputLine;
    while ((inputLine = in.readLine()) != null) {
    System.out.println(inputLine);
    text.setText(inputLine + "\n\n");
    pingResult += inputLine;
    text.setText(pingResult);
    }
    in.close();
    }//try
    catch (IOException e) {
    System.out.println(e);
    }


    }
    });
    }}

此FindPeopleFragment.java(应为PingFragment.java)。我认为这是一次成功的尝试,因为日食没有显示任何红色标记,但是如果我错了,请纠正我。

package info.androidhive.slidingmenu;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


public class FindPeopleFragment extends Fragment 
        implements OnClickListener
{
        EditText edit;
        TextView text;
        Button button;





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

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


        EditText edit = (EditText) rootView.findViewById(R.id.editText1);
        edit.setText("192.168.1.1");
        text = (TextView) rootView.findViewById(R.id.textView1);
        button = (Button)rootView.findViewById(R.id.button1);
        button.setOnClickListener(onClickListener);





        return rootView;
    }

    @Override
    public void onClick(View v) {
        Editable host = edit.getText();
        try {
        String pingCmd = "ping -c 5 " + host;
        String pingResult = "";
        Runtime r = Runtime.getRuntime();
        Process p = r.exec(pingCmd);
        BufferedReader in = new BufferedReader(new
        InputStreamReader(p.getInputStream()));
        String inputLine;
        while ((inputLine = in.readLine()) != null) {
        System.out.println(inputLine);
        text.setText(inputLine + "\n\n");
        pingResult += inputLine;
        text.setText(pingResult);
        }
        in.close();
        }//try
        catch (IOException e) {
        System.out.println(e);
        }

    }

};;

最后,这是我在上述项目中的清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="info.androidhive.slidingmenu"
    android:versionCode="1"
    android:versionName="1.0" >

    <permission
        android:name="my.jlm.permission.MAPS_RECEIVE"
        android:protectionLevel="signature"/>

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="museumjakarta.source.permission.MAPS_RECEIVE"/>    
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>


      <uses-permission android:name="android.permission.CALL_PHONE" />
      <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="info.androidhive.slidingmenu.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>




    </application>

</manifest>

这是我的LogCat错误日志:

03-15 09:07:41.160: E/AndroidRuntime(1267): FATAL EXCEPTION: main
03-15 09:07:41.160: E/AndroidRuntime(1267): Process: info.androidhive.slidingmenu, PID: 1267
03-15 09:07:41.160: E/AndroidRuntime(1267): java.lang.NullPointerException
03-15 09:07:41.160: E/AndroidRuntime(1267):     at info.androidhive.slidingmenu.FindPeopleFragment.onClick(FindPeopleFragment.java:53)
03-15 09:07:41.160: E/AndroidRuntime(1267):     at android.view.View.performClick(View.java:4424)
03-15 09:07:41.160: E/AndroidRuntime(1267):     at android.view.View$PerformClick.run(View.java:18383)
03-15 09:07:41.160: E/AndroidRuntime(1267):     at android.os.Handler.handleCallback(Handler.java:733)
03-15 09:07:41.160: E/AndroidRuntime(1267):     at android.os.Handler.dispatchMessage(Handler.java:95)
03-15 09:07:41.160: E/AndroidRuntime(1267):     at android.os.Looper.loop(Looper.java:137)
03-15 09:07:41.160: E/AndroidRuntime(1267):     at android.app.ActivityThread.main(ActivityThread.java:4998)
03-15 09:07:41.160: E/AndroidRuntime(1267):     at java.lang.reflect.Method.invokeNative(Native Method)
03-15 09:07:41.160: E/AndroidRuntime(1267):     at java.lang.reflect.Method.invoke(Method.java:515)
03-15 09:07:41.160: E/AndroidRuntime(1267):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
03-15 09:07:41.160: E/AndroidRuntime(1267):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
03-15 09:07:41.160: E/AndroidRuntime(1267):     at dalvik.system.NativeStart.main(Native Method)

为简化起见,这就是我的经验:在Drawer ListView中单击后会显示Ping xml页面,但是,当我单击其中的Ping按钮时,应用程序崩溃了,并产生了以上错误日志。帮助我解决此问题,非常感谢。

PS:我正在使用eclipse adt,因为我无法在AMD处理器上运行AS。

编辑:认为可能会有所帮助,我将为此片段发布mainActivity.java:

package info.androidhive.slidingmenu;

import info.androidhive.slidingmenu.adapter.NavDrawerListAdapter;
import info.androidhive.slidingmenu.model.NavDrawerItem;

import java.util.ArrayList;

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

public class MainActivity extends Activity {
    private DrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    private ActionBarDrawerToggle mDrawerToggle;

    // nav drawer title
    private CharSequence mDrawerTitle;

    // used to store app title
    private CharSequence mTitle;

    // slide menu items
    private String[] navMenuTitles;
    private TypedArray navMenuIcons;

    private ArrayList<NavDrawerItem> navDrawerItems;
    private NavDrawerListAdapter adapter;

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

        mTitle = mDrawerTitle = getTitle();

        // load slide menu items
        navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);

        // nav drawer icons from resources
        navMenuIcons = getResources()
                .obtainTypedArray(R.array.nav_drawer_icons);

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.list_slidermenu);

        navDrawerItems = new ArrayList<NavDrawerItem>();

        // adding nav drawer items to array
        // Home
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
        // Find People
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
        // Photos
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1)));
        // Communities, Will add a counter here
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1), true, "22"));
        // Pages
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1)));
        // What's hot, We  will add a counter here
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1), true, "50+"));


        // Recycle the typed array
        navMenuIcons.recycle();

        mDrawerList.setOnItemClickListener(new SlideMenuClickListener());

        // setting the nav drawer list adapter
        adapter = new NavDrawerListAdapter(getApplicationContext(),
                navDrawerItems);
        mDrawerList.setAdapter(adapter);

        // enabling action bar app icon and behaving it as toggle button
        getActionBar().setDisplayHomeAsUpEnabled(true);
        getActionBar().setHomeButtonEnabled(true);

        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                R.drawable.ic_drawer, //nav menu toggle icon
                R.string.app_name, // nav drawer open - description for accessibility
                R.string.app_name // nav drawer close - description for accessibility
        ) {
            public void onDrawerClosed(View view) {
                getActionBar().setTitle(mTitle);
                // calling onPrepareOptionsMenu() to show action bar icons
                invalidateOptionsMenu();
            }

            public void onDrawerOpened(View drawerView) {
                getActionBar().setTitle(mDrawerTitle);
                // calling onPrepareOptionsMenu() to hide action bar icons
                invalidateOptionsMenu();
            }
        };
        mDrawerLayout.setDrawerListener(mDrawerToggle);

        if (savedInstanceState == null) {
            // on first time display view for first nav item
            displayView(0);
        }
    }

    /**
     * Slide menu item click listener
     * */
    private class SlideMenuClickListener implements
            ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            // display view for selected nav drawer item
            displayView(position);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // toggle nav drawer on selecting action bar app icon/title
        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        // Handle action bar actions click
        switch (item.getItemId()) {
        case R.id.action_settings:
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

    /* *
     * Called when invalidateOptionsMenu() is triggered
     */
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        // if nav drawer is opened, hide the action items
        boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
        menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
        return super.onPrepareOptionsMenu(menu);
    }

    /**
     * Diplaying fragment view for selected nav drawer list item
     * */
    private void displayView(int position) {
        // update the main content by replacing fragments
        Fragment fragment = null;
        switch (position) {
        case 0:
            fragment = new HomeFragment();
            break;
        case 1:
            fragment = new FindPeopleFragment();
            break;
        case 2:
            fragment = new PhotosFragment();
            break;
        case 3:
            fragment = new CommunityFragment();
            break;
        case 4:
            fragment = new PagesFragment();
            break;
        case 5:
            fragment = new WhatsHotFragment();
            break;

        default:
            break;
        }

        if (fragment != null) {
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.frame_container, fragment).commit();

            // update selected item and title, then close the drawer
            mDrawerList.setItemChecked(position, true);
            mDrawerList.setSelection(position);
            setTitle(navMenuTitles[position]);
            mDrawerLayout.closeDrawer(mDrawerList);
        } else {
            // error in creating fragment
            Log.e("MainActivity", "Error in creating fragment");
        }
    }

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

    /**
     * When using the ActionBarDrawerToggle, you must call it during
     * onPostCreate() and onConfigurationChanged()...
     */

    @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 toggls
        mDrawerToggle.onConfigurationChanged(newConfig);
    }

}
素描盎司

使用以下代码行:

button = (Button)rootView.findViewById(R.id.button1);
button.setOnClickListener(this); // Best Solution <---
button.setOnClickListener(rootView);

或者

button.setOnClickListener(getActivity());

然后,您必须onClick()按以下方式调用方法:

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.button1:
            // CODE TO DO
            break;
    }
}

另外,您可以执行以下操作:

import android.view.View.OnClickListener;

button = (Button) rootView.findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        // Your Code Lines
    }

编辑

我认为您的代码很好。唯一要做的就是添加:button.setOnClickListener(this);然后,在您的方法中添加switchfor语句v.getId()OnClick

编辑2

package info.androidhive.slidingmenu;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


public class FindPeopleFragment extends Fragment
implements View.OnClickListener {
        EditText edit;
        TextView text;
        Button button;

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

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


            EditText edit = (EditText) rootView.findViewById(R.id.editText1);
            edit.setText("192.168.1.1");
            text = (TextView) rootView.findViewById(R.id.textView1);
            button = (Button) rootView.findViewById(R.id.button1);
            button.setOnClickListener(this);

            return rootView;
        }

        @Override
        public void onClick(View v) {

            switch (v.getId()) {
                case R.id.button1:
                    Editable host = edit.getText();
                    try {
                        String pingCmd = "ping -c 5 " + host;
                        String pingResult = "";
                        Runtime r = Runtime.getRuntime();
                        Process p = r.exec(pingCmd);
                        BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
                        String inputLine;
                        while ((inputLine = in .readLine()) != null) {
                            System.out.println(inputLine);
                            text.setText(inputLine + "\n\n");
                            pingResult += inputLine;
                            text.setText(pingResult);
                        } in .close();
                    } //try
                    catch (IOException e) {
                        System.out.println(e);
                    }
                    break;
                    case default:
                    log.i("Inf", "there's no click");
                    break;
            }
     }
     }

编辑3

package info.androidhive.slidingmenu;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


public class FindPeopleFragment extends Fragment
implements OnClickListener {
        EditText edit;
        TextView text;
        Button button;
        Editable Edit2 ;

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

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


            EditText edit = (EditText) rootView.findViewById(R.id.editText1);
            edit.setText("192.168.1.1");
            Edit2 = edit.getText();
            text = (TextView) rootView.findViewById(R.id.textView1);
            button = (Button) rootView.findViewById(R.id.button1);
            button.setOnClickListener(this);

            return rootView;
        }



        @Override
        public void onClick(View v) {

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


                    try {
                        String pingCmd = "ping -c 5 " + Edit2;
                        String pingResult = "";
                        Runtime r = Runtime.getRuntime();
                        Process p = r.exec(pingCmd);
                        BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
                        String inputLine;
                        while ((inputLine = in .readLine()) != null) {
                            System.out.println(inputLine);
                            text.setText(inputLine + "\n\n");
                            pingResult += inputLine;
                            text.setText(pingResult);
                        } in .close();
                    } //try
                    catch (IOException e) {
                        System.out.println(e);
                    }
                    break;


            }
        }
     }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

片段中的按钮setOnClickListener onCreateView()或onActivityCreated()

来自分类Dev

片段中的Android按钮setOnClickListener错误

来自分类Dev

如何在片段中实现ImageView的OnClickListener?

来自分类Dev

如何在片段中实现导航抽屉

来自分类Dev

如何在片段中实现视图

来自分类Dev

如何在片段中实现OnScrollistener

来自分类Dev

如何在活动中访问片段的按钮

来自分类常见问题

如何在Android Studio中的片段中实现onback press

来自分类Dev

如何在Swift中实现“共享按钮”

来自分类Dev

如何在引导按钮中实现<a>标签

来自分类Dev

如何在抖动中实现超时按钮

来自分类Dev

如何在片段中实现侦听器接口?

来自分类Dev

如何在片段中实现onBackPressed()和意图?

来自分类Dev

如何在片段Android中实现视差滚动

来自分类Dev

如何在Flutter中实现片段之间的导航?

来自分类Dev

如何在片段中实现自定义视图

来自分类Dev

如何在bottombar的片段之一中实现tabview?

来自分类Dev

在Android片段活动中实现后退按钮

来自分类Dev

在Android片段活动中实现后退按钮

来自分类Dev

如何在PyGame中实现选项按钮并更改按钮颜色?

来自分类Dev

如何在片段中覆盖浮动操作按钮?

来自分类Dev

如何在ExpandableListAdapter中使用片段中的按钮

来自分类Dev

如何在ActionTab和多个片段中的片段中实现滑动视图?

来自分类Dev

如何在片段 java 文件中添加功能以共享我在主页片段中创建的按钮?

来自分类Dev

未在片段中调用setOnClickListener

来自分类Dev

如何在 setOnClickListener 中显示 Toast?

来自分类Dev

如何在片段内部实现viewpager?

来自分类Dev

如何在片段内部实现viewpager?

来自分类Dev

如何在Java swing中为按钮网格实现actionlistener?

Related 相关文章

  1. 1

    片段中的按钮setOnClickListener onCreateView()或onActivityCreated()

  2. 2

    片段中的Android按钮setOnClickListener错误

  3. 3

    如何在片段中实现ImageView的OnClickListener?

  4. 4

    如何在片段中实现导航抽屉

  5. 5

    如何在片段中实现视图

  6. 6

    如何在片段中实现OnScrollistener

  7. 7

    如何在活动中访问片段的按钮

  8. 8

    如何在Android Studio中的片段中实现onback press

  9. 9

    如何在Swift中实现“共享按钮”

  10. 10

    如何在引导按钮中实现<a>标签

  11. 11

    如何在抖动中实现超时按钮

  12. 12

    如何在片段中实现侦听器接口?

  13. 13

    如何在片段中实现onBackPressed()和意图?

  14. 14

    如何在片段Android中实现视差滚动

  15. 15

    如何在Flutter中实现片段之间的导航?

  16. 16

    如何在片段中实现自定义视图

  17. 17

    如何在bottombar的片段之一中实现tabview?

  18. 18

    在Android片段活动中实现后退按钮

  19. 19

    在Android片段活动中实现后退按钮

  20. 20

    如何在PyGame中实现选项按钮并更改按钮颜色?

  21. 21

    如何在片段中覆盖浮动操作按钮?

  22. 22

    如何在ExpandableListAdapter中使用片段中的按钮

  23. 23

    如何在ActionTab和多个片段中的片段中实现滑动视图?

  24. 24

    如何在片段 java 文件中添加功能以共享我在主页片段中创建的按钮?

  25. 25

    未在片段中调用setOnClickListener

  26. 26

    如何在 setOnClickListener 中显示 Toast?

  27. 27

    如何在片段内部实现viewpager?

  28. 28

    如何在片段内部实现viewpager?

  29. 29

    如何在Java swing中为按钮网格实现actionlistener?

热门标签

归档