简体   繁体   English

如何判断按钮视图是否存在于java/android中

[英]How to tell if button view exists in java/android

I find this hard to believe that i can not find this answer anywhere.我很难相信我在任何地方都找不到这个答案。 It does not seem like the code that i have works correctly for checking the existence of a button view.我所使用的代码似乎无法正常工作以检查按钮视图是否存在。 Here is what i have, any suggestions are greatly appreciated.这是我所拥有的,非常感谢任何建议。 Thanks!谢谢!

Java file: Java 档案:

public class LayoutsActivity extends Activity {

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
    ActivateButtons();
}

void ActivateButtons()
{
    Button mainLayoutButton = (Button) this.findViewById(R.id.MainLayout);
    if(mainLayoutButton != null)
    {
        mainLayoutButton.setOnClickListener(new View.OnClickListener() {    
            public void onClick(View v) {
                setContentView(R.layout.main);
                ActivateButtons();
            }
        });
    }

    Button linearLayoutButton = (Button) this.findViewById(R.id.LinearLayout);
    if(linearLayoutButton != null)
    {
        linearLayoutButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                setContentView(R.layout.mylinearlayout);
                ActivateButtons();
            }
        });
    }

    Button tableLayoutButton = (Button) this.findViewById(R.id.TableLayout);
        tableLayoutButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                setContentView(R.layout.mytablelayout);
                ActivateButtons();
            }
        });


    Button frameLayoutButton = (Button) this.findViewById(R.id.FrameLayout);
    if(frameLayoutButton != null)
    {
        frameLayoutButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                setContentView(R.layout.myframelayout);
                ActivateButtons();
            }
        });
    }
    Button relativeLayoutButton = (Button) this.findViewById(R.id.RelativeLayout);
    if(relativeLayoutButton != null)
    {
        relativeLayoutButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                setContentView(R.layout.myrelativelayout);
                ActivateButtons();
            }
        });
    }

    Button absoluteLayoutButton = (Button) this.findViewById(R.id.AbsoluteLayout);
    if(absoluteLayoutButton != null)
    {
         absoluteLayoutButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                setContentView(R.layout.myabsolutelayout);
                ActivateButtons();
            }
        }); 
    }

    Button DynamicLayoutButton = (Button) this.findViewById(R.id.DynamicLayout);
    if(DynamicLayoutButton != null)
    {
        DynamicLayoutButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                LinearLayout dynamicLayout = new LinearLayout(LayoutsActivity.this);
                dynamicLayout.setOrientation(LinearLayout.VERTICAL);
                LinearLayout.LayoutParams size=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);

                final TextView mytext= new TextView(LayoutsActivity.this);
                mytext.setText("This is the dynamic layout");
                mytext.setTextSize(20);
                mytext.setGravity(Gravity.CENTER);

                dynamicLayout.addView(mytext, size);
                /* Button b= new Button(LayoutsActivity.this);
                b.setText("Click Here to go to Main Layout");
                dynamicLayout.addView(b, size); */

                Button b= new Button(LayoutsActivity.this);
                b.setText("Main Layout");
                b.setId(R.id.DynamicLayout);
                dynamicLayout.addView(b, size);

                //Step L
                Button linear = new Button(LayoutsActivity.this);
                b.setText("Linear Layout");
                b.setId(R.id.LinearLayout);
                dynamicLayout.addView(linear, size);

                Button table = new Button(LayoutsActivity.this);
                table.setText("Table Layout");
                table.setId(R.id.LinearLayout);
                dynamicLayout.addView(table, size);

                ActivateButtons();

                setContentView(dynamicLayout);
            }
        });
    }
}

} }

XML file: I have one for each layout but all are similar XML 文件:每个布局都有一个,但都相似

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

    <Button
        android:id="@+id/LinearLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Linear layout" />
        <!-- The layout lays out its children next to each other (horizontally or vertically)-->
    <Button
        android:id="@+id/TableLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Table Layout" />
        <!-- The layout represents a table like structure where there are columns and rows for the children-->
    <Button
        android:id="@+id/FrameLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Frame Layout" />
        <!-- The layout places the children on top of one another-->
    <Button
        android:id="@+id/RelativeLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Relative Layout" />
        <!-- The layout positions its children relative to each other-->
    <Button
        android:id="@+id/AbsoluteLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Absolute Layout" />
        <!-- The layout has children with absolute coordinates-->
    <Button
        android:id="@+id/DynamicLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Dynamic Layout" />
        <!-- The layout creates a second, new page -->
    <Button
        android:id="@+id/MainLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Main Layout" />
        <!-- The layout returns to the original layout which seems to be similar to the linear layout-->
</LinearLayout>

I'm a little confused. 我有点困惑。 If your button is in the XML layout, how could it never not exist? 如果您的按钮是XML布局,它怎么可能永远不存在? And if it wasn't in the XML, your R.id.MainLayout would not compile. 如果它不在XML中,则您的R.id.MainLayout将无法编译。 Unless you're saying MainLayout is some layout and not a button. 除非你说MainLayout是一些布局而不是按钮。 Which is also gonna cause a problem because you're casting it to a button.. Does this code compile and run? 这也会导致问题,因为你将它转换为按钮..这段代码是否编译并运行?

I need to update a dynamically created button in an array without the app crashing if it doesn't exist.我需要更新数组中动态创建的按钮,如果它不存在,应用程序不会崩溃。 I have implemented it like this.我是这样实现的。 This works for me.这对我有用。

    for(int x=0; x<numberOfRecords; x++) {

        try {
            buttonsArray[x].setEnabled(false);
        } catch (Exception e) {
            // code to deal with error here
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM