将一项活动的状态转移到另一项

时间:2018-08-14 06:16:02

标签: android

我有两个活动屏幕:创建和查看。 创建是用户创建购物清单的地方。 查看是他们查看列表的地方(并且仍然可以添加项目)。

更新: 有人可能会说,为什么不使用一个活动而不是使两个活动基本相同,但这就是我计划的方式。我想要这样,当您通过在创建屏幕上按FAB添加微调器时,可以从中选择值。然后,当您返回到主菜单,然后回到查看屏幕时,这些微调器和从“创建”屏幕中选择的值也会显示在此处。另外,我想要它,因此当您关闭应用程序并重新打开它时,您选择的所有微调器和值仍然会出现。如有任何疑问,请发表评论。

我很欣赏下面带有示例的帖子,但是对于是否适合我的情况我感到困惑!

下面是我的create.java代码。 (view.java具有完全相同的代码,只是在地方使用.view而不是.create,还有一些额外的代码。)

create.java

public class create extends AppCompatActivity {


    private LinearLayout mLinearLayout;
    private ArrayList<SearchableSpinner> mSpinners;
    private List<AppCompatButton> mButtons = new ArrayList<>();
    private List<CheckBox> mCheckboxes = new ArrayList<>();
    private List<TextView> mTextviews = new ArrayList<>();
    private List<EditText> mEdittexts = new ArrayList<>();
    private List<View> mViews = new ArrayList<>();
    private Map<String, String> numberItemValues = new HashMap<>();
    List<String> itemList = new ArrayList<>();
    //Button buttontest;
    // TextView textview;
    // CheckBox checkbox;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_create);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        GlobalClass globalClass = (GlobalClass) this.getApplicationContext();


        ArrayList<String> items = new ArrayList<>();
        items.add(String.valueOf(mSpinners)); // add you selected item
        globalClass.setItems(items);


        mSpinners = new ArrayList<>();

        mLinearLayout = findViewById(R.id.my_linearLayout);


        //code for the add button to add more items
        FloatingActionButton floatingActionButton =
                (FloatingActionButton) findViewById(R.id.fab);

        floatingActionButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getBaseContext(), "Item added!", Toast.LENGTH_SHORT).show();


                // Handle ze click.
                final Spinner spinner = makeSpinner();
                mLinearLayout.addView(spinner);


                LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) spinner.getLayoutParams();
                layoutParams.setMargins(5, 100, 10, 0); //top 70

                Resources resources = getResources();
                DisplayMetrics metrics = resources.getDisplayMetrics();

                layoutParams.height = (int) (70 * ((float) metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT)); //80
                layoutParams.width = (int) (240 * ((float) metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT)); //240
                spinner.setLayoutParams(layoutParams);

                final View newView = makeView();
                //Add a new view
                mLinearLayout.addView(newView);
                mViews.add(newView);


                final EditText newEdittext = makeEdittext();
                mLinearLayout.addView(newEdittext);
                mEdittexts.add(newEdittext);


                final int listSize = mViews.size();


                //code for deleting the said item.
                newView.setOnClickListener(new View.OnClickListener() {
                    //start
                    @Override
                    public void onClick(View view) {

                        //when the 'new button' is pressed, alert shows if you are sure you want to delete the item or not.

                        final View.OnClickListener context = this;


                        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(create.this);


                        // set title
                        alertDialogBuilder.setTitle("Delete Item");

                        // set dialog message
                        alertDialogBuilder
                                .setMessage("Are you sure you want to delete this item?")
                                .setCancelable(false)
                                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        // if this button is clicked, close
                                        // current activity


                                        if (listSize > 0) {

                                            mCheckboxes.get(listSize - 1).setVisibility(View.GONE);
                                            mSpinners.get(listSize - 1).setVisibility(View.GONE);
                                            mViews.get(listSize - 1).setVisibility(View.GONE);
                                            mTextviews.get(listSize - 1).setVisibility(View.GONE);
                                            mEdittexts.get(listSize - 1).setVisibility(View.GONE);
                                            Toast.makeText(getBaseContext(), "Item removed.", Toast.LENGTH_SHORT).show();

                                        }


                                    }
                                })
                                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        // if this button is clicked, just close
                                        // the dialog box and do nothing
                                        dialog.cancel();
                                    }
                                });

                        // create alert dialog
                        AlertDialog alertDialog = alertDialogBuilder.create();

                        // show it
                        alertDialog.show();


                    }
                });


                //Add a new checkbox
                final CheckBox newCheckbox = makeCheckbox();
                mLinearLayout.addView(newCheckbox);

                //TODO add checkbox to your list
                mCheckboxes.add(newCheckbox);


                final TextView newTextview = makeTextview();
                mLinearLayout.addView(newTextview);
                mTextviews.add(newTextview);

                //TODO Add the spinner on item selected listener to get selected items
                spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
                        String currentItem = itemList.get(position);
                        String aisleNumber = numberItemValues.get(currentItem);
                        //TODO you can use the above aisle number to add to your text view
                        //mTextviews.get(mTextviews.size() -1).setText(aisleNumber);
                        newTextview.setText(aisleNumber);
                    }

                    @Override
                    public void onNothingSelected(AdapterView<?> parentView) {
                        //  code here
                    }

                });


            }
        });

    }










   /* //creates the 3 buttons on the side.
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.create_menu, menu);
        return true;
    }
*/





    //use a relative layout and specify which ones are to layout_toRightOf and layout_below

    //DUPLICATING ITEMS WHEN FAB IS PRESSED//
    private CheckBox makeCheckbox() {
        //Create new Checkbox
        CheckBox checkbox = new CheckBox(this);

        // Setup layout
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);


        //setup relative layout for the positioning of the objects

       /* RelativeLayout.LayoutParams relativeParams = new RelativeLayout.LayoutParams(
                relativeParams.addRule(RelativeLayout.RIGHT_OF, textview); //can't  resolve symbol textview
                )

        checkbox.setLayoutParams(relativeParams);*/
        checkbox.setLayoutParams(layoutParams);
        return checkbox;
    }


    private TextView makeTextview() {
        //create new textview
        TextView textview = new TextView(this);

        //setup layout

        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        textview.setLayoutParams(layoutParams);
        textview.setText("ihi");


        return textview;
    }


    private EditText makeEdittext() {
        //create new edittext
        EditText edittext = new EditText(this);

        //setup layout
        final LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(50, 50); // Width , height
        edittext.setLayoutParams(lparams);
        edittext.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_NUMBER_FLAG_SIGNED);

        return edittext;

    }




    private View makeView() {
        //create new View

        View view = new View(this);
        view.setBackgroundColor(Color.parseColor("#ffffff"));
        LinearLayout.LayoutParams layoutParams =  new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, 100);
        new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, 50);
        //LinearLayout.LayoutParams.MATCH_PARENT,
        // LinearLayout.LayoutParams.WRAP_CONTENT);
        view.setClickable(true);




        view.setLayoutParams(layoutParams);


        //setup layout

        return view;


    }






    private Spinner makeSpinner() {
        //opens csv
        InputStream inputStream = getResources().openRawResource(R.raw.shopitems);
        CSVFile csvFile = new CSVFile(inputStream);
        //TODO I made this variable global, declared it at the very top of this file
        itemList = csvFile.read();

        //Create new spinner
        // SearchableSpinner spinner = (SearchableSpinner) new Spinner(this, Spinner.MODE_DROPDOWN);
        SearchableSpinner spinner = new SearchableSpinner(this);


        // Setup layout
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        spinner.setLayoutParams(layoutParams);
        MyListAdapter adapter = new MyListAdapter(this, R.layout.listrow, R.id.txtid, itemList);


        spinner.setAdapter(adapter);



        //Add it to your list of spinners so you can retrieve their data when you click the getSpinner button
        mSpinners.add(spinner);
        return spinner;
    }



    private class CSVFile {
        InputStream inputStream;

        public CSVFile(InputStream inputStream) {
            this.inputStream = inputStream;
        }

        public List<String> read() {

            List<String> resultList = new ArrayList<String>();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            try {
                String line;
                while ((line = reader.readLine()) != null) {
                    String[] row = line.split(",");
                    //TODO I edited this part so that you'd add the values in our new hash map variable
                    numberItemValues.put(row[1], row[0]);
                    resultList.add(row[1]);
                }
            } catch (IOException e) {
                Log.e("Main", e.getMessage());
            } finally {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    Log.e("Main", e.getMessage());
                }
            }
            return resultList;
        }
    }}

创建xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorBackground"
    android:minHeight="170dp"
    tools:context=".create"
    tools:layout_editor_absoluteY="81dp">


    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/scrollView2"
        android:layout_width="match_parent"
        android:layout_height="438dp"
        android:fillViewport="true"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintStart_toStartOf="parent"
        tools:layout_editor_absoluteY="0dp">


        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/my_linearLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">


        </LinearLayout>


    </ScrollView>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="60dp"
        android:layout_height="70dp"
        android:layout_gravity="bottom|end"
        android:layout_marginBottom="16dp"
        android:layout_marginEnd="16dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="16dp"
        android:layout_marginStart="8dp"
        android:src="@android:drawable/ic_input_add"
        app:backgroundTint="@color/colorCreate"
        app:elevation="6dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintStart_toStartOf="parent"
        app:pressedTranslationZ="12dp"
        android:tint="@color/colorBackground"/>


    <View
        android:id="@+id/subheading"
        android:layout_width="match_parent"
        android:layout_height="83dp"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="1dp"
        android:layout_marginLeft="1dp"
        android:layout_marginRight="1dp"
        android:layout_marginStart="1dp"
        android:layout_marginTop="2dp"
        android:background="@color/colorBackground"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0"
        />

    <TextView
        android:id="@+id/example"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="492dp"
        android:layout_marginLeft="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="TextView"
        android:hint="test"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <View
        android:id="@+id/view"
        android:layout_width="320dp"
        android:layout_height="1dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="76dp"
        android:background="@color/colorText"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <View
        android:id="@+id/view2"
        android:layout_width="320dp"
        android:layout_height="1dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="28dp"
        android:background="@color/colorText"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"

        android:layout_marginTop="12dp"
        android:fontFamily="@font/droid_sans"
        android:text="@string/done_label"
        android:textColor="@color/colorText"
        android:textSize="20sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/textView4"
        app:layout_constraintTop_toBottomOf="@+id/view2" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="128dp"
        android:layout_marginRight="128dp"
        android:layout_marginTop="8dp"
        android:fontFamily="@font/droid_sans"
        android:text="@string/aisle_label"
        android:textColor="@color/colorText"
        android:textSize="20sp"
        app:layout_constraintBottom_toTopOf="@+id/view"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/view2"
        app:layout_constraintVertical_bias="1.0" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dp"
        android:layout_marginEnd="32dp"
        android:layout_marginRight="32dp"
        android:layout_marginTop="5dp"
        android:fontFamily="@font/droid_sans"
        android:text="@string/qty_label"
        android:textColor="@color/colorText"
        android:textSize="20sp"
        app:layout_constraintBottom_toTopOf="@+id/view"
        app:layout_constraintEnd_toStartOf="@+id/textView4"
        app:layout_constraintTop_toBottomOf="@+id/view2"
        app:layout_constraintVertical_bias="0.7" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:fontFamily="@font/droid_sans"
        android:text="@string/item_label"
        android:textColor="@color/colorText"
        android:textSize="20sp"
        app:layout_constraintBottom_toTopOf="@+id/view"
        app:layout_constraintEnd_toStartOf="@+id/textView3"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/view2"
        app:layout_constraintVertical_bias="1.0" />


</android.support.constraint.ConstraintLayout>

9 个答案:

答案 0 :(得分:5)

[已更新]

因此,基本上,您有2个活动类,createview(如上所述)。

以全局形式声明微调框。该代码的所有其他说明均以注释的形式。

public class create extends AppCompatActivity {

private LinearLayout mLinearLayout;
private ArrayList<SearchableSpinner> mSpinners;
//TODO add the below list of buttons and checkboxes
//private List<AppCompatButton> mButtons = new ArrayList<>();
private List<CheckBox> mCheckboxes = new ArrayList<>();
private List<View> mViews = new ArrayList<>();

Button buttonGo;

//define spinner here
Spinner spinner;


//your own code
......
floatingActionButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getBaseContext(), "Item added!", Toast.LENGTH_SHORT).show();

            RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT);
            RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT);
            // Handle the click.


            //initialise your spinner here
            spinner = makeSpinner();

            //your code as usual
        }

    //put this some where in your code where you want to start another activity after your operations are done (usually in onClick of something)
    {
        Intent i= new Intent(this, YourSecondClass.class);
        //Create the bundle
        Bundle bundle = new Bundle();

        //Add your data to bundle one by one, in this case passing spinner selected value, 
        //replace val1 with your own variable name
        bundle.putString("val1", spinner.getSelectedItem().toString());

        //if you have more spinner,add in similar way
        bundle.putString("val2", spinner2.getSelectedItem().toString());

        //Add the bundle to the intent
        i.putExtras(bundle);
        startActivity(i);
    }


}
}

以下是view活动的示例。

public class view extends AppCompatActivity {

...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        //initialise your spinner here
        spinner = makeSpinner();

        //Get bundle from previous intent(activity)
        Bundle bundle = getIntent().getExtras();

        //Extract the data…
        String val1= bundle.getString("val1");
        String val2= bundle.getString("val2");

        //USUALLY, you will have a list of items in your spinner, do what you should do, this is just an example.
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.select_state, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        //set the adapter
        mSpinner.setAdapter(adapter);


        if (val1 != null) {
            int spinnerPosition = adapter.getPosition(val1);
            spinner.setSelection(spinnerPosition);
        }       
        ...


    }
...

}

注意:这只是一个指导或“框架”,为您提供了一些有关应将代码放置在何处的线索。不能完全解决,因为您的代码太长,我无法保证其正确,因此没有包括它们。

答案 1 :(得分:1)

buttonGo.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
if(spinner!=null){

Intent i= new Intent(create.this, viewscreen.class);
//Create the bundle
Bundle bundle = new Bundle();

//Add your data to bundle
bundle.putString("dropdown", dropdown_value);

//Add the bundle to the intent
i.putExtras(bundle);
startActivity(i);
             }
         });

答案 2 :(得分:1)

public class create extends AppCompatActivity {

private LinearLayout mLinearLayout;
private ArrayList<SearchableSpinner> mSpinners;
//TODO add the below list of buttons and checkboxes
// private List<AppCompatButton> mButtons = new ArrayList<>();
private List<CheckBox> mCheckboxes = new ArrayList<>();
private List<View> mViews = new ArrayList<>();
Button buttonGo;
Spinner spinner;
......
floatingActionButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getBaseContext(), "Item added!", Toast.LENGTH_SHORT).show();

            RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT);
            RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT);
            // Handle the click.


            // Handle ze click.
            //final Spinner spinner = makeSpinner();
            //mLinearLayout.addView(spinner);

            spinner = makeSpinner();
}

答案 3 :(得分:1)

我不知道你为什么仍然陷入这个问题。当您知道要在“活动”中传递值时。如果我考虑到您的问题,就会想到各种解决方案。

解决方案1:使用 @Angus 解决方案,当您遵循他的回答时,我检查了您的代码。

基本上,您必须将一个值传递给下一个活动,例如位置/微调器选择的值。

bundle.putString("selectedPos", spinner.getSelectedItemPosition());

bundle.putString("selectedItem", ((String) spinner.getSelectedItem()));

解决方案2:,您有 SharedPreference 可以将这些值存储在第一个活动中,然后在第二个活动中获取已保存的值。

解决方案3:我不建议使用Application类来存储变量,但是可以!这是一个解决方案。像this answer。我不使用Application类来存储值,因为在手动使用后我们需要清除字段,以恢复RAM使用情况

解决方案4::正如您所说的,两个“活动”几乎相同,那么为什么不只使用一个“活动”并相应地管理“视图”呢?

修改

如果我说对了,那么您可以将生成的Spinners项目列表和选定的项目传递给下一个活动。您可以轻松通过 Parcelable List

“第一项活动”通过了微调器模型列表。

ArrayList<ModelSpinner> list = new ArrayList<>();
list.add(new ModelSpinner(itemsList, (String) spinner.getSelectedItem()));
startActivity(new Intent(this, MainActivity.class).putParcelableArrayListExtra("key", list));

第二个活动获取列表并根据视图进行制作

ArrayList<ModelSpinner> list = getIntent().getParcelableArrayListExtra("key");
for (ModelSpinner spinner : list) {
//            render spinners
    Spinner spinner = makeSpinner(spinner.getItems(),spinner.getSelectedValue());
    // todo create method makeSpinner(List<String> list, String selectedItem), add this spinner to your activity.
}

ModelSpinner.class

public class ModelSpinner implements Parcelable {
    private ArrayList<String> items;
    private String selectedValue;

    // getter setter

    public ModelSpinner(ArrayList<String> items, String selectedValue){
       this.items = items;
       this.selectedValue = selectedValue;
    }


    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeStringList(this.items);
        dest.writeString(this.selectedValue);
    }

    public ModelSpinner() {
    }

    protected ModelSpinner(Parcel in) {
        this.items = in.createStringArrayList();
        this.selectedValue = in.readString();
    }

    public static final Parcelable.Creator<ModelSpinner> CREATOR = new Parcelable.Creator<ModelSpinner>() {
        @Override
        public ModelSpinner createFromParcel(Parcel source) {
            return new ModelSpinner(source);
        }

        @Override
        public ModelSpinner[] newArray(int size) {
            return new ModelSpinner[size];
        }
    };
}

答案 4 :(得分:1)

此方案的最佳解决方案是使用架构组件库中的ViewModel和LiveData,这将为您提供两个Activity中数据的一致性。用于活动的单个ViewModel和用于两个活动的共享LiveData的单个ViewModel,当您从任何Activity更新任何LiveData时,这将很有帮助,它将反映在观察ViewModel中定义的LiveData的所有Activity中。

答案 5 :(得分:1)

您将上下文称为“ This”,但是是从覆盖接口中方法的方法内部调用它的,但是该方法不在此类中,因此不知道“ This”是什么,因此无法解决为此,请在您创建类中:

public class Create extends AppCompatActivity {
  private Context context;
  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        context = this;
        buttonGo.setOnClickListener(new View.OnClickListener() {
                                        public void onClick(View v) {

                                            if(spinner!=null){

                                                Intent i= new Intent(context, View.class);
                                                startActivity(i);
                                            }
                                        };
  }
}

您可以按意图传递数据,也可以使用Create类中的静态变量传递数据。

创建课程:

    public class Create extends AppCompatActivity {
        public static String optionSelected;
//other code....
            spinner.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                          Create.optionSelected = parent.getItemAtPosition(position).toString();  
                        }
                    });
//other code....

            }

在您的View Class to call optionSelected:

public class View extends AppCompatActivity {

 String dropdown_value= Create.optionSelected;

  // rest of code
}

如果要使用类别适配器类:

public class CategoryAdapter extends FragmentPagerAdapter {

    public CategoryAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position){
            case 0:
                return new CreateFragment();
            case 1:
                return new ViewFragment();
            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return 2;
    }
}

答案 6 :(得分:0)

我认为您要做的是将用户选择的项目从创建屏幕传递到查看屏幕。

您可以使用全局类来存储所选项目的值。并像普通的Java类一样使用它。

public class GlobalClass extends Application {
    ArrayList<String> items = new ArrayList<>();

    public ArrayList<String> getItems() {
        return items;
    }

    public void setItems(ArrayList<String> items) {
        this.items = items;
    }
}

在清单文件的应用程序标记中定义

<application
    android:name=".GlobalClass"

并在两个活动的onCreate函数中像这样使用它

globalClass = (GlobalClass) this.getApplicationContext();

然后,您可以使用getter和setter来访问所选项目列表。 在创建活动中,

ArrayList<String> items = new ArrayList<>();
items.add(item); // add you selected item
globalClass.setItems(items);

查看活动中

ArrayList<String> items = globalClass.getItems();

答案 7 :(得分:0)

我有类似的要求。我用不同的逻辑解决了它。

  1. 创建一个类以供参考。
  2. 将数据存储在此类中,然后使用Gson进行字符串化并将其传递给第二个活动。
  3. 使用Gson从字符串化的json返回类对象。
  4. OnCreate,根据步骤3中收到的对象内容更新UI。

这将使控制和开发流程变得友好。希望这能很好地满足您的要求。

  

存储视图并进行传输并不是一个更好的主意,因为这会在以后导致开发复杂性。

对于n个微调器,如果有多个数据,则可以使用产品对象的ArrayList并动态创建微调器视图。

答案 8 :(得分:-1)

好吧,我建议做的是创建一个ArrayList的{​​{1}},以跟踪您在第一个IntegerActivity中创建的微调框数量以及每个微调框的位置,即ArrayList.size()中的值。

因此,首先在第一个ArrayList中单击按钮时,将以下代码放在onClick方法中:

Activity

然后在第二个ArrayList<Integer> spinnerList = new ArrayList<>(); for(int i = 0; i < mSpinners.size(); i++) { spinnerList.add(mSpinners.get(i).getSelectedItemPosition()); } Bundle newBundle = new Bundle(); newBundle.putIntegerArrayList("arraylist", spinnerList); Intent newIntent = new Intent(create.this, view.class); newIntent.putExtra("extraBundle", newBundle); startActivity(newIntent); (视图Activity)中获得Activity,如下所示:

ArrayList

获取Intent gotIntent = getIntent(); Bundle bundle = getIntent().getBundleExtra("extraBundle"); ArrayList<Integer> spinnerArrayList = bundle.getIntegerArrayList("arraylist"); 后,请创建与ArrayList大小相同的For loop次,即您拥有的微调器数量,并添加用于添加微调器和其他代码的代码观看次数:

ArrayList