Android:从TabHost启动新活动将禁用onClick

Android:从TabHost启动新活动将禁用onClick,android,onclick,android-tabhost,Android,Onclick,Android Tabhost,我有一个包含4个选项卡的选项卡活动。单击其中一个选项卡中的按钮并启动新活动时,如果新活动不在TabHost中,则新活动不会在单击时注册。新的活动甚至不能显示祝酒词,这让我觉得TabHost在某种程度上阻塞了ui 将活动作为选项卡之一时,OnClick工作正常。 你知道这是什么原因吗 我包括了3个课程: 1禁忌活动 2选项卡中开始的活动: 3无法注册OnClick的新活动 1.活动: public class OverView extends TabActivity { @Overrid

我有一个包含4个选项卡的选项卡活动。单击其中一个选项卡中的按钮并启动新活动时,如果新活动不在TabHost中,则新活动不会在单击时注册。新的活动甚至不能显示祝酒词,这让我觉得TabHost在某种程度上阻塞了ui

将活动作为选项卡之一时,OnClick工作正常。 你知道这是什么原因吗

我包括了3个课程:

1禁忌活动

2选项卡中开始的活动:

3无法注册OnClick的新活动

1.活动:

public class OverView extends TabActivity {

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

        /** TabHost will have Tabs */
        TabHost tabHost     = (TabHost)findViewById(android.R.id.tabhost);

        /** TabSpec used to create a new tab.
         * By using TabSpec only we can able to setContent to the tab.
         * By using TabSpec setIndicator() we can set name to tab. */

        /** tid1 is firstTabSpec Id. Its used to access outside. */
        TabSpec Search      = tabHost.newTabSpec("tid1");
        TabSpec AllArtists  = tabHost.newTabSpec("tid1");
        TabSpec Favorites   = tabHost.newTabSpec("tid1");
        TabSpec About       = tabHost.newTabSpec("tid1");

        /** TabSpec setIndicator() is used to set name for the tab. */
        Search.     setIndicator("Search");
        AllArtists. setIndicator("AllArtists");
        Favorites.  setIndicator("Favorites");
        About.      setIndicator("About");

        /** TabSpec setContent() is used to set content for a particular tab. */
        Search.setContent       (new Intent(this, Search.class));
        AllArtists.setContent   (new Intent(this, AllArtists.class));
        Favorites.setContent    (new Intent(this, Favorites.class));
        About.setContent        (new Intent(this, About.class));

        /** Add tabSpec to the TabHost to display. */
        tabHost.addTab(Search);
        tabHost.addTab(AllArtists);
        tabHost.addTab(Favorites);
        tabHost.addTab(About);
    }
}
public class AllArtists extends Activity {

    // Debug
    private final String    TAG = this.getClass().getSimpleName();  

    // XML
    EditText                searchBox;
    ListView                listView;

    // Adapter
    ListAdapter             listAdapter;

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

        listAdapter = new ListAdapter(this, null);

        // XML
        listView    = (ListView)findViewById(R.id.allartists_listview);
        searchBox   = (EditText)findViewById(R.id.allartists_searchbox);

        listView.setAdapter(listAdapter);
        listView.setFastScrollEnabled(true);
        listView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                String memberID = (String)listAdapter.getID(position).toString();

                if (!memberID.equals("HEADER")){
                    Log.d(TAG, "Jumping to Artists.class");
                    Intent intentArtist = new Intent (AllArtists.this, Artist.class);
                    intentArtist.putExtra("ID", memberID);
                    startActivity(intentArtist);
                }
            }
        });
}
2所有人在选项卡中列出活动。单击列表项可启动新活动:

public class AllArtists extends Activity {

    // Debug
    private final String    TAG = this.getClass().getSimpleName();  

    // XML
    EditText                searchBox;
    ListView                listView;

    // Adapter
    ListAdapter             listAdapter;

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

        listAdapter = new ListAdapter(this, null);

        // XML
        listView    = (ListView)findViewById(R.id.allartists_listview);
        searchBox   = (EditText)findViewById(R.id.allartists_searchbox);

        listView.setAdapter(listAdapter);
        listView.setFastScrollEnabled(true);
        listView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                String memberID = (String)listAdapter.getID(position).toString();

                if (!memberID.equals("HEADER")){
                    Log.d(TAG, "Jumping to Artists.class");
                    Intent intentArtist = new Intent (AllArtists.this, Artist.class);
                    intentArtist.putExtra("ID", memberID);
                    startActivity(intentArtist);
                }
            }
        });
}

谢谢,

敬酒时,您需要打电话给show

Toast.makeText(this, "OK, your in Activity_Artist..", Toast.LENGTH_SHORT).show();
对于除按钮之外的任何对象的单击操作,您需要定义

android:clickable="true" 

在布局中。

解决了这个问题。在布局中,在布局的底部有一个空的GridView,设置为android:layout\u height=fill\u parent,它偷走了touchevent


奇怪的是,当将完全相同的活动和完全相同的XML放在选项卡中时,onClick工作得很好。

Hhaha这不是我第一次忘记添加.show。事实上,我从来没有使用过android:clickable=true,而且我从来没有在可点击方面遇到过任何问题。默认值不是设置为true吗?除此之外,我看不出为什么不发布click事件的任何原因,因为这不是TabHost活动的一部分,onClick应该在该活动本身中使用。