自定义视图位于选项卡中时自定义视图中的按钮

时间:2012-06-18 01:04:16

标签: android xml view tabs

问题

是否可以从不同的Activity或Java文件中运行一个选项卡而不是其他三个选项卡,从而允许我将第二个Activity连接到第一个Activity运行的服务器。

有关我的应用的一些信息

我所拥有的是一个多标签应用,有几种不同的布局。其中之一是交互式图形布局。在这个选项卡上,大多数都需要是我已经设置的自定义视图,但我需要在底部有一排小部件,如按钮,滑块等。我现在处于如下运行图形布局的位置将它设置为应用程序将运行的清单中的主要活动(android:name=".Tab3Activity")并在我单击按钮时打印出文本如果我从选项卡运行它,因为我需要它来运行应用程序将崩溃我点击按钮。这是我目前的代码

标签设置

    th.setup();
    TabSpec specs = th.newTabSpec("tag0");
    specs.setContent(R.id.connecttionTab);
    specs.setIndicator("Connection Tab");
    th.addTab(specs);
    specs = th.newTabSpec("tag1");
    specs.setContent(R.id.tab1);
    specs.setIndicator("Zone Manager");
    th.addTab(specs);
    specs = th.newTabSpec("tag2");
    specs.setContent(R.id.tab2);
    specs.setIndicator("",res.getDrawable(R.drawable.ic_tab_vaccontrol));
    th.addTab(specs);
    //Intent intent = new Intent().setClass(this, Tab3Activity.class); tryed using this but
    //with this tab goes ontop of all the other ones and still doesnt work.
    TabSpec spec = th.newTabSpec("Tab3").setIndicator("Graphical Layout").setContent(R.id.tab3);
    th.addTab(spec);

Tab3Activity

public class Tab3Activity extends Activity 
{
    private Tab3 mTab3;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tab3);
        mTab3 = (Tab3) findViewById(R.id.tab3_display);
    }

    public void onAddZone(View view)
    {
        mTab3.addZone();
    }
}

Tab3(查看课程)

public class Tab3 extends View implements OnTouchListener
{
    public Tab3(Context context, AttributeSet attrs)
    {
        super (context, attrs);
        setFocusable(true);
        setFocusableInTouchMode(true); 
        setOnTouchListener(this);
        requestFocus();
    }
    @Override
    protected void onDraw(Canvas canvas)
    {
        super.onDraw(canvas);
        //drawings
        invalidate();
    }
    @Override
    public boolean onTouch(View v, MotionEvent event) 
    {
        //onTouch
        return true;
    }   
    public void addZone() 
    {
        //String w = "W~20~0~0~0~0~0";
        Log.d("ZoneSize", "Zone set");
        //MyApplication.preferences.edit().putString( "ZoneSize", w ).commit();
        //MyApplication.preferences.edit().putBoolean("ZoneSizeReady", true).commit();
    }
}

XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:id="@+id/myLayout"
    android:orientation="vertical"
    android:layout_height="match_parent" >

    <com.zone.manager.Tab3
        android:id="@+id/tab3_display"
        android:layout_width="fill_parent"
        android:layout_height="620dp" />

         <LinearLayout
            android:layout_width="match_parent"
            android:orientation="horizontal"
            android:layout_height="match_parent" >   

            <Button
                android:id="@+id/addZone"
                android:layout_width="wrap_content"
                android:onClick="onAddZone"
                android:layout_height="wrap_content"
                android:text="Add Zone" />

            <Button
                android:id="@+id/helpZone"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Help" />

            <SeekBar
                android:id="@+id/seekBar1"
                android:paddingTop="9dp"
                android:layout_width="179dp"
                android:layout_height="wrap_content" />

        </LinearLayout>
</LinearLayout>

感谢你给我的任何帮助!

1 个答案:

答案 0 :(得分:3)

虽然我们希望您发布崩溃日志,但我建议您不要使用旧的标签方法(当然,除非您的客户强制要求您使用这些标签)。自从那个标签小部件以来,Android的ui模式已经发生了严重的变化。

实现标签的当代方法是使用ActionBarFragments API,它们自Honeycomb以来一直存在,但可用于早期的Android版本作为支持库,您可以使用android sdk管理器下载。基于片段的方法可以为您节省很多麻烦。

至于你的主要问题,你不是很清楚你要从不同的活动中推出一些东西,但如果你需要从一个活动启动一个长期运行的任务并将结果返回到另一个活动,你可能想要阅读Services(特别是,IntentService很可能是您正在寻找的)