【问题标题】:How to pass List data from Activity to presenter(MVP) in android如何将列表数据从Activity传递给android中的presenter(MVP)
【发布时间】:2017-11-02 02:27:09
【问题描述】:

如何将列表数据从活动传递给演示者。我已经尝试过 activityname.listname 但它得到了 NULL 。我能知道怎么打电话吗?

MainActivity.java

                 public List<AppGrid> arraylist = new ArrayList<AppGrid>();
                 Bundle bundle = getIntent().getExtras();
    if(bundle != null){
        arraylist = bundle.getParcelableArrayList("mylist");
        Toast.makeText(MainActivity.this,"bundle->+"+arraylist,Toast.LENGTH_LONG).show();

        }
 AddFavariteApps();
    }

   private void AddFavariteApps() {
    HeaderItem HeaderInstalledApps = new HeaderItem(0, "Favourite");
    GridItemPresenter1 gridFavouriteApps = new GridItemPresenter1();
    ArrayObjectAdapter FavouriteAppsAdapter = new ArrayObjectAdapter(gridFavouriteApps);
    FavouriteAppsAdapter.add(getString(R.string.installed_apps));
    FavouriteAppsAdapter.add("Add Apps");
    rowsAdapter.add(new ListRow(HeaderInstalledApps, FavouriteAppsAdapter));
}

GridItemPresenter1.java

public class GridItemPresenter1 extends Presenter {
private static Context mContext;
private static int CARD_WIDTH = 313;
private static int CARD_HEIGHT = 176;
String str_App_name;
Drawable str_App_Icon;
MainActivity mMainActivity;

@Override
public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
    str_App_name = Constants.shared().getAppName();
    if (((String) item).equalsIgnoreCase("Add Apps")) {
        ((ViewHolder) viewHolder).mCardView.setContentText("Add Apps");
        ((ViewHolder) viewHolder).mCardView.setMainImageDimensions(CARD_WIDTH, CARD_HEIGHT);
        ((ViewHolder) viewHolder).updateCardViewImage1(R.drawable.item_img_add);

    }else {
        if(mMainActivity.arraylist != null) {
            for (int i = 0; i < mMainActivity.arraylist.size(); i++) {
                viewHolder).mCardView.setContentText(mMainActivity.arraylist.get(i).getName());
            }
        }
    }

}

【问题讨论】:

标签: android android-activity presenter


【解决方案1】:

假设您的 List 是一个字符串列表,则使 data 成为一个 ArrayList 并使用

    intent.putStringArrayListExtra("data", data)

这是您需要的代码框架:

声明列表

    private List<String> test;

在适当的地方初始化列表

    test = new ArrayList<String>();

并根据需要添加数据以进行测试。 传递给意图如下:

    Intent intent = getIntent();  
    intent.putStringArrayListExtra("test", (ArrayList<String>) test);

检索数据如下:

    ArrayList<String> test = getIntent().getStringArrayListExtra("test");

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    将您的数组列表作为参数传递给下面的代码。

       public List<AppGrid> arraylist = new ArrayList<AppGrid>();
                         Bundle bundle = getIntent().getExtras();
            if(bundle != null){
                arraylist = bundle.getParcelableArrayList("mylist");
                Toast.makeText(MainActivity.this,"bundle->+"+arraylist,Toast.LENGTH_LONG).show();
    
                }
         AddFavariteApps();
            }
    
           private void AddFavariteApps() {
            HeaderItem HeaderInstalledApps = new HeaderItem(0, "Favourite");
            GridItemPresenter1 gridFavouriteApps = new GridItemPresenter1(arraylist); // pass as your arraylist as parameter
            ArrayObjectAdapter FavouriteAppsAdapter = new ArrayObjectAdapter(gridFavouriteApps);
            FavouriteAppsAdapter.add(getString(R.string.installed_apps));
            FavouriteAppsAdapter.add("Add Apps");
            rowsAdapter.add(new ListRow(HeaderInstalledApps, FavouriteAppsAdapter));
        }
    

    ================================================ ===========

    public class GridItemPresenter1 extends Presenter {
    private static Context mContext;
    private static int CARD_WIDTH = 313;
    private static int CARD_HEIGHT = 176;
    String str_App_name;
    Drawable str_App_Icon;
    MainActivity mMainActivity;
    
     public GridItemPresenter1 (List<AppGrid> arraylist) {
            this.arraylist = arraylist;
        }
    
    @Override
    public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
        str_App_name = Constants.shared().getAppName();
        if (((String) item).equalsIgnoreCase("Add Apps")) {
            ((ViewHolder) viewHolder).mCardView.setContentText("Add Apps");
            ((ViewHolder) viewHolder).mCardView.setMainImageDimensions(CARD_WIDTH, CARD_HEIGHT);
            ((ViewHolder) viewHolder).updateCardViewImage1(R.drawable.item_img_add);
    
        }else {
           if(arraylist != null) {
                    for (int i = 0; i <arraylist.size(); i++) {
                        viewHolder).mCardView.setContentText(arraylist.get(i).getName());
                    }
                }
        }
    
    }
    

    【讨论】:

    • 你需要在presenter中声明你的list为public static List arraylist,而不是在activity中添加值,当你返回时,在onResume下使用arraylist,这是一种方法
    • 另一个是你可以在第二个 avtivy 时关闭 lastActivty ,在获取数据后你可以通过发送 arraylist 开始之前的活动,
    • 关闭现有活动并转到新活动使用代码 Intent i = new Intent(this, A.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(i);
    • 这里我只使用 mainactivity.java ...从这样的活动调用演示者 GridItemPresenter1 gridFavouriteApps = new GridItemPresenter1();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 2012-04-14
    • 1970-01-01
    相关资源
    最近更新 更多