【问题标题】:How to receive Intent in Activity如何在 Activity 中接收 Intent
【发布时间】:2016-01-15 18:54:20
【问题描述】:

老实说,我在询问之前对此进行了一些搜索。如何从活动接收意图到fragmentactivity 我正在尝试使用 viewpager。我在 get argumentsBundle extras = getArguments(); 中遇到错误@

public class SingleViewActivity extends FragmentActivity {
    ImageView   imageView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_page_view);

   ArrayList<Listitem> personArrayList = new ArrayList<Listitem>();
       // Listitem item = new Listitem("1", "http://developer.android.com/assets/images/android_logo.png");//I used to add it staticly

        Bundle extras = getArguments();
        if (extras != null) {
            extras = extras.getParcelableArrayList(ARG_PERSON_LIST);
            personArrayList.add(item);        }
    //    DemoObjectFragment f = DemoObjectFragment.newInstance(personArrayList);

        ViewPager    mViewPager = (ViewPager) findViewById(R.id.pager);
        Log.d("s", "singleview");


        DemoCollectionPagerAdapter mDemoCollectionPagerAdapter =      new DemoCollectionPagerAdapter( getSupportFragmentManager(),personArrayList);
        mViewPager.setAdapter(mDemoCollectionPagerAdapter);

【问题讨论】:

  • Bundle extras = getIntent().getExtras()
  • @cricket_007 谢谢伙计,但我在这里出错了,extras = extras.getParcelableArrayList(ARG_PERSON_LIST);应该是什么?
  • "extras.getParcelableArrayList(ARG_PERSON_LIST);"正在返回您要放入 Bundle 对象的 ParcelableList。我可以告诉你,即使没有堆栈跟踪 :)

标签: android android-intent parcelable android-bundle


【解决方案1】:

您将需要两个活动。由于您没有发布启动已发布ActivityActivity,因此我制作了一个简单的,其中仅包含启动所示ActivityButton

注意注释的步骤。总共有六个步骤。

第一个Activity 获取ArrayList 数据,然后将其传递给第二个Activity,第二个Activity 反过来又让给DemoCollectionAdapter

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);

        Button button = (Button) findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // Step 1: Build an ArrayList to pass to the next Activity
                ArrayList<Listitem> items = new ArrayList<Listitem>();
                items.add(new Listitem("1", "http://developer.android.com/assets/images/android_logo.png"));
                items.add(new Listitem("2", "https://i.stack.imgur.com/B28Ca.jpg?s=328&g=1"));

                // Step 2: Create an Intent to start the next Activity
                Intent intent = new Intent(getApplicationContext(), SingleViewActivity.class);

                // Step 3: Put the ArrayList into the Intent
                intent.putParcelableArrayListExtra(SingleViewActivity.ARG_PERSON_LIST, items);

                // Step 4: Start the next Activity
                startActivity(intent);
            }
        });
    }
}

public class SingleViewActivity extends FragmentActivity {
    public static final String ARG_PERSON_LIST = "ARG_PERSON_LIST";

    private ArrayList<Listitem> items;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_page_view);

        // Step 5: Get the Bundle from the Intent that started this Activity
        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            // Step 6: Get the data out of the Bundle
            items = extras.getParcelableArrayList(ARG_PERSON_LIST);
        } else {
            items = new ArrayList<Listitem>();
        }

        ViewPager pager = (ViewPager) findViewById(R.id.pager);
        DemoCollectionPagerAdapter adapter = new DemoCollectionPagerAdapter(getSupportFragmentManager(), items);
        pager.setAdapter(adapter);

    }
}

【讨论】:

  • 感谢它的工作。你了不起的男人。顺便说一句,我不知道它是否需要一个新问题,但我无法滑动图像..xml 是正确的,它包含 viewpager
  • DemoCollectionPagerAdapter 中的 getCount 方法应该返回列表的大小而不是 1。例如。 public int getCount() { return this. personArrayList.size(); }
  • 不,它不起作用 public int getCount() { return this.personArrayList.size(); } 你能帮我吗?
  • 然后在列表中添加多个Listitem
  • 没看懂,怎么加listitem
【解决方案2】:

您正在将 ParcelableList 对象分配给 Bundle 变量。

extras = extras.getParcelableArrayList(ARG_PERSON_LIST); //change it

将其分配给ParcelableList,而不是extras

编辑:

试试这个,

ArrayList<Listitem> personArrayList;
// Listitem item = new Listitem("1", "http://developer.android.com/assets/images/android_logo.png");//I used to add it staticly

Bundle extras = getArguments();
if (extras != null) {
    personArrayList = (ArrayList<Listitem>) extras.getParcelableArrayList("jh");
    personArrayList.add(item); 
    ....       
}

【讨论】:

  • 对不起,我是 android 新手.. 我应该改变什么?
  • 取决于你想做什么。查看编辑后的答案
  • 它没用,getarguments() 和 arraylist 下面的错误,我想从一个活动接收到一个片段的意图,项目在哪里?
  • @Moudiz - 您的错误在于 item 未定义,因此无法添加到列表中
【解决方案3】:

当您创建片段对象时,您还已经在创建的片段对象中设置了参数。

这样的……

Fragment f = new Fragment();
Bundle args = new Bundle();
args.putInt("someNum", 0);
f.setArguments(args);

然后在fragment的onCreate()或onCreateView方法中,获取参数。

getArguments().getInt("someNum");

在您的情况下,它将是可打包或可序列化的对象。

【讨论】:

  • 问题是关于Activity,而不是Fragment
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 1970-01-01
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多