如何将tablerow内容链接到复选框?

时间:2016-12-07 16:12:41

标签: android android-tablelayout android-checkbox

想象一下,我在第二个活动中的主要活动和表格中有标准的复选框。我想将表链接到复选框,例如,当检查价格和里程时,仅显示价格和里程列。但是当没有任何东西被检查时,表格没有出现。如果有人能解释如何做或者给我一个教程链接,我真的很感激。

MainActivity.java:

package todo.beginner.com.carchooser2;
    
        import android.content.Intent;
        import android.os.Bundle;
        import android.support.v7.app.AppCompatActivity;
        import android.view.View;
        import android.widget.Button;
        import android.widget.CheckBox;
        import android.widget.Toast;
    
        import static todo.beginner.com.carchooser2.R.id.checkBoxPrice;
        import static todo.beginner.com.carchooser2.R.id.checkBoxGas;
        import static todo.beginner.com.carchooser2.R.id.checkBoxYear;
        import static todo.beginner.com.carchooser2.R.id.checkBoxMileage;
        import static todo.beginner.com.carchooser2.R.id.checkBoxCapacity;
    
        public class MainActivity extends AppCompatActivity {
            private CheckBox check1, check2, check3, check4, check5;
            private static Button button_next;
    
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                addListenerToCeckBox();
                OnClickButtonListener();
            }
    
            public void OnClickButtonListener() {
                button_next = (Button)findViewById(R.id.button);
                button_next.setOnClickListener(
                        new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                                startActivity(intent);
    
                            }
                        }
                );
    new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                    intent.putExtra("Price", check1.isChecked());
                    startActivity(intent);
    
                }
            };
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                    intent.putExtra("Year", check2.isChecked());
                    startActivity(intent);
    
                }
            };
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                    intent.putExtra("Capacity", check3.isChecked());
                    startActivity(intent);
    
                }
            };
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                    intent.putExtra("Gas", check4.isChecked());
                    startActivity(intent);
    
                }
            };
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                    intent.putExtra("Mileage", check5.isChecked());
                    startActivity(intent);
    
                }
            };
    
    
            }
    
            public void addListenerToCeckBox() {
                check1 = (CheckBox)findViewById(checkBoxCena);
                check1.setOnClickListener(
                        new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                if (((CheckBox)v).isChecked()){
                                    Toast.makeText(MainActivity.this,
                                            "Price is chosen", Toast.LENGTH_LONG).show();
                                }
                            }
                        }
                );
                check2 = (CheckBox)findViewById(checkBoxGads);
                check2.setOnClickListener(
                        new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                if (((CheckBox)v).isChecked()){
                                    Toast.makeText(MainActivity.this,
                                            "Year is chosen", Toast.LENGTH_LONG).show();
                                }
                            }
                        }
                );
                check3 = (CheckBox)findViewById(checkBoxTilpums);
                check3.setOnClickListener(
                        new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                if (((CheckBox)v).isChecked()){
                                    Toast.makeText(MainActivity.this,
                                            "Engine capacity is chosen", Toast.LENGTH_LONG).show();
                                }
                            }
                        }
                );
                check4 = (CheckBox)findViewById(checkBoxDegviela);
                check4.setOnClickListener(
                        new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                if (((CheckBox)v).isChecked()){
                                    Toast.makeText(MainActivity.this,
                                            "Gas consumption is chosen", Toast.LENGTH_LONG).show();
                                }
                            }
                        }
                );
                check5 = (CheckBox)findViewById(checkBoxNobraukums);
                check5.setOnClickListener(
                        new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                if (((CheckBox)v).isChecked()){
                                    Toast.makeText(MainActivity.this,
                                            "Mileage is chosen", Toast.LENGTH_LONG).show();
                                }
                            }
                        }
                );
    
            }
    
    
    
        }

activity_main.xml中:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="todo.beginner.com.carchooser2.MainActivity">

    <CheckBox
        android:text="Price"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/checkBoxPrice"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="67dp" />

    <CheckBox
        android:text="Year"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/checkBoxPrice"
        android:layout_alignRight="@+id/checkBoxPrice"
        android:layout_alignEnd="@+id/checkBoxPrice"
        android:layout_marginTop="33dp"
        android:id="@+id/checkBoxYear" />

    <CheckBox
        android:text="Capacity"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="37dp"
        android:id="@+id/checkBoxCapacity"
        android:layout_below="@+id/checkBoxYear"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <CheckBox
        android:text="Gas"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/checkBoxCapacity"
        android:layout_alignRight="@+id/checkBoxCapacity"
        android:layout_alignEnd="@+id/checkBoxCapacity"
        android:layout_marginTop="30dp"
        android:id="@+id/checkBoxGas" />

    <CheckBox
        android:text="Mileage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/checkBoxGas"
        android:layout_alignRight="@+id/checkBoxGas"
        android:layout_alignEnd="@+id/checkBoxGas"
        android:layout_marginTop="33dp"
        android:id="@+id/checkBoxMileage" />

    <Button
        android:text="Continue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="31dp"
        android:id="@+id/button" />

    <TextView
        android:text="Choose criteria!"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:id="@+id/textView"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
</RelativeLayout>

SecondActivity.java:

package todo.beginner.com.carchooser2;
    
        import android.support.v7.app.AppCompatActivity;
        import android.os.Bundle;
    
        public class SecondActivity extends AppCompatActivity {
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_second);
    	    boolean hasPrice = getIntent().getBooleanExtra("Price", true);
            boolean hasYear = getIntent().getBooleanExtra("Year", true);
            boolean hasCapacity = getIntent().getBooleanExtra("Capacity", true);
            boolean hasGas = getIntent().getBooleanExtra("Gas", true);
            boolean hasMileage = getIntent().getBooleanExtra("Mileage", true);
    
            TextView Price = (TextView) findViewById(R.id.Price); // you will need to create this id in your layout
            Price.setVisibility(hasPrice ? View.VISIBLE : View.GONE);
    
            TextView Year = (TextView) findViewById(R.id.Year); // you will need to create this id in your layout
            Year.setVisibility(hasYear ? View.VISIBLE : View.GONE);
    
            TextView Capacity = (TextView) findViewById(R.id.Capacity); // you will need to create this id in your layout
            Capacity.setVisibility(hasCapacity ? View.VISIBLE : View.GONE);
    
            TextView Gas = (TextView) findViewById(R.id.Gas); // you will need to create this id in your layout
            Gas.setVisibility(hasGas ? View.VISIBLE : View.GONE);
    
            TextView Mileage = (TextView) findViewById(R.id.Mileage); // you will need to create this id in your layout
            Mileage.setVisibility(hasMileage ? View.VISIBLE : View.GONE);
            }
        }

activity_second.xml:

<?xml version="1.0" encoding="utf-8"?>
        <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="10dp">
    
            <TableRow
                android:background="#607D8B"
                android:padding="5dp">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:id="@+id/Name"
                    android:text="Car Name" />
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:id="@+id/Price"
                    android:text="Price" />
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:id="@+id/Year"
                    android:text="Year" />
            <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:id="@+id/Gas"
                    android:text="Gas" />
            <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:id="@+id/Mileage"
                    android:text="Mileage" />
            <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:id="@+id/Capacity"
                    android:text="Capacity" />
            </TableRow>
    
            <TableRow
                android:background="#ECEFF1"
                android:padding="5dp">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="Audi" />
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="5000" />
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="2001" />
            <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="7" />
            <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="280000" />
            <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="2.5" />
            </TableRow>
        </TableLayout>

1 个答案:

答案 0 :(得分:1)

OnClickButtonListener中,您宣布了很多new View.OnClickListener(),但您只是创建了实现,然后没有对它们做任何事情。应该删除所有这些。您的方法应如下所示:

        public void OnClickButtonListener() {
            button_next = (Button)findViewById(R.id.button);
            button_next.setOnClickListener(
                    new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                            intent.putExtra("Price", check1.isChecked());
                            intent.putExtra("Year", check2.isChecked());
                            intent.putExtra("Capacity", check3.isChecked());
                            intent.putExtra("Gas", check4.isChecked());
                            intent.putExtra("Mileage", check5.isChecked());
                            startActivity(intent);

                        }
                    }
            );
        }

了解它与onCreateSecondActivity方法中的代码的相似之处?

在此更改之后,您应该看到您希望看到的内容。

您的第一步是创建一个具有复选框值的Intent,并将其传递给第二个活动:

    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
    intent.putExtra("name", check1.isChecked());
    // same for other checkboxes
    startActivity(intent);

接下来,在SecondActivity访问这些值:

    boolean hasName = getIntent().getBooleanExtra("name", true);

创建TableRow时,请根据值设置可见性:

    TextView carName = (TextView) findViewById(R.id.car_name); // you will need to create this id in your layout
    carName.setVisibility(hasName ? View.VISIBLE : View.GONE);

请记住,如果没有选中任何内容,那么您将无法看到任何内容,因此您应该以{{1​​}}开始,并选中所有选中的复选框。