Android:将额外内容从一个活动传递到另一活动

2024-01-27

我有一个填充到活动(Main.java)的 JSON 文件。

此活动显示了来自我的 JSON 条目上的 URL 的 3 个随机图像。

我想要做的是:我的 JSON 上有 13 个不同的条目,每当我单击显示的随机图片时,它都会转到另一个活动 (ProjectDetail.java),其中包含图片、标题和描述,具体取决于我单击的项目它在 JSON 中的条目。

我所拥有的是通过使用 extra by 我不知道如何执行该操作,因为我使用的是 JSON。我应该添加什么到我的top_listener我的 Main 类上的方法以及我应该在 ProjectDetail 类中添加什么?

主程序.java

   public class Main extends Activity {
            /** Called when the activity is first created. */
            
            ArrayList<Project> prjcts=null;
            private ImageThreadLoader imageLoader = new ImageThreadLoader();
            private final static String TAG = "MediaItemAdapter";
            
            
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                
                prjcts = new ArrayList<Project>();
                WebService webService = new WebService("http://liebenwald.spendino.net/admanager/dev/android/projects.json");
                Map<String, String> params = new HashMap<String, String>();
                params.put("var", "");
                String response = webService.webGet("", params);
                
                try
                {
                    Type collectionType = new TypeToken<ArrayList<Project>>(){}.getType();
                    List<Project> lst= new Gson().fromJson(response, collectionType);
                    for(Project l : lst)
                    {
                        prjcts.add(l);
                        ConstantData.projectsList.add(l);
                    }
                }
                catch(Exception e)
                {
                    Log.d("Error: ", e.getMessage());
                }
                
                final Button project = (Button) findViewById(R.id.btn_projectslist);
                final Button infos = (Button) findViewById(R.id.btn_infos);
                final Button contact = (Button) findViewById(R.id.btn_contact);
                project.setOnClickListener(project_listener);
                infos.setOnClickListener(infos_listener);
                contact.setOnClickListener(contact_listener);
                
                ImageView image1;
                ImageView image2;
                ImageView image3;
                
                try {
                    image1 = (ImageView)findViewById(R.id.top1);
                    image2 = (ImageView)findViewById(R.id.top2);
                    image3 = (ImageView)findViewById(R.id.top3);
                  } catch( ClassCastException e ) {
                    Log.e(TAG, "Your layout must provide an image and a text view with ID's icon and text.", e);
                    throw e;
                  }
        
        
                  Bitmap cachedImage1 = null;
                  Bitmap cachedImage2 = null;
                  Bitmap cachedImage3 = null;
                  
                  //randomize the index of image entry
                  
                  int max = prjcts.size();
                  List<Integer> indices = new ArrayList<Integer>(max);
                  for(int c = 0; c < max; ++c)
                  {
                      indices.add(c);
                  }
                  
                  int arrIndex = (int)((double)indices.size() * Math.random());
                  int randomIndex1 = indices.get(arrIndex);
                  indices.remove(arrIndex);
                  
                  
                  int randomIndex2 = indices.get(arrIndex);
                  indices.remove(arrIndex);
                  
                
                  int randomIndex3 = indices.get(arrIndex);
                  indices.remove(arrIndex);
                  
             
                  
                  setImage(cachedImage1, image1, prjcts.get(randomIndex1));
                  setImage(cachedImage2, image2, prjcts.get(randomIndex2));
                  setImage(cachedImage3, image3, prjcts.get(randomIndex3));
                  
                  image1.setOnClickListener(top_listener);
                  image2.setOnClickListener(top_listener);
                  image3.setOnClickListener(top_listener);
            }
           
            
            
            public void setImage(Bitmap cachedImage, final ImageView image, Project pro)
            {
                //Bitmap cachedImage1 = null;
                try {
                    cachedImage = imageLoader.loadImage(pro.smallImageUrl, new ImageLoadedListener() 
                    {
                        public void imageLoaded(Bitmap imageBitmap)
                        {
                            image.setImageBitmap(imageBitmap);
                            //notifyDataSetChanged();                
                        }
                    });
                } catch (MalformedURLException e) {
                    Log.e(TAG, "Bad remote image URL: " + pro.smallImageUrl, e);
                }
                if( cachedImage != null ) {
                    image.setImageBitmap(cachedImage);
                  }
            }
            
            
            private OnClickListener top_listener = new OnClickListener() {
                public void onClick(View v) {
                            Intent top = new Intent(Main.this, InfosActivity.class);
                            startActivity(top);
                }
                };

项目详细信息.java

public class ProjectDetail extends Activity implements OnClickListener{
    
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.project);
        
        Button weitersagen = (Button) findViewById(R.id.btn_weitersagen);
        weitersagen.setOnClickListener(this);
 
        Button sms = (Button) findViewById(R.id.btn_sms_spenden);
        sms.setOnClickListener(this);
        
        int position = getIntent().getExtras().getInt("spendino.de.ProjectDetail.position");
        Project project = ConstantData.projectsList.get(position);
      

      try {
          ImageView projectImage = (ImageView)findViewById(R.id.project_image);
          Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(project.bigImageUrl).getContent());
          projectImage.setImageBitmap(bitmap); 
        } catch (MalformedURLException e) {
          e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
        } 

      TextView project_title = (TextView)findViewById(R.id.txt_project_title);
      project_title.setText(project.project_title);
      
      TextView organization_title = (TextView)findViewById(R.id.txt_organization_title);
      organization_title.setText(Html.fromHtml("von " +project.organization_title));

      TextView project_description = (TextView)findViewById(R.id.txt_project_description);
      project_description.setText(Html.fromHtml(project.project_description));
        
    }
     

我也有这个常量数据.java,保存我的 JSON 属性的索引:

 public class ConstantData{

   public static String project_title = "project title";
   public static String organization_title = "organization title";
   public static String keyword = "keyword";
   public static String short_code = "short code";
   public static String project_description = "description";
   public static String smallImageUrl = "smallImageUrl";
   public static String bigImageUrl = "bigImageUrl";
   public static String price= "price";
   public static String country= "country";



    public static ArrayList<Project> projectsList = new ArrayList<Project>();
    
    
    public int describeContents() {
        return 0;
    }

    public void writeToParcel(Parcel out, int flags) {
        out.writeString(project_title);
        out.writeString(organization_title);
        out.writeString(keyword);
        out.writeString(short_code);
        out.writeString(project_description);
        out.writeString(smallImageUrl);
        out.writeString(bigImageUrl);
        out.writeString(price);
        out.writeString(country);
    }

    public static final Parcelable.Creator<ConstantData> CREATOR
            = new Parcelable.Creator<ConstantData>() {
        public ConstantData createFromParcel(Parcel in) {
            return new ConstantData(in);
        }

        public ConstantData[] newArray(int size) {
            return new ConstantData[size];
        }
    };
    
    private ConstantData(Parcel in) {
        project_title = in.readString();
        organization_title = in.readString();
        keyword = in.readString();
        short_code = in.readString();
        project_description = in.readString();
        smallImageUrl = in.readString();
        bigImageUrl = in.readString();
        price = in.readString();
        country = in.readString();
    }
}

您可以通过从 Parcelable 扩展并实现几个方法来使 ConstantData 类可序列化(请参阅文档 http://developer.android.com/reference/android/os/Parcelable.html)。然后你可以通过以下方式传递一个constantData实例作为额外的

intent.putExtra("jsonData", constantDataInstance);

并从其他活动(在其 onCreate() 方法中)检索它

getIntent().getExtras().getParcelable("jsonData");

否则你可以单独通过额外的每个字段,但这会是一团糟。这种方式不仅更容易阅读和一切,而且“设计得很好”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:将额外内容从一个活动传递到另一活动 的相关文章

随机推荐

  • 如何将ResponseEntity写入HttpServletResponse?

    如何将 ResponseEntity 写入 HttpServletResponse 因为它使 ResponseBody 例如我有身份验证成功处理程序 Override public void onAuthenticationSuccess
  • lucene 字段的 store 属性

    lucene Field有一个构造函数 Field String name String value Store store Index index 例如 我可以通过以下方式创建一个新字段 Field f1 new Field text T
  • 在android中创建自定义警报框

    我知道这个问题已经被回答过很多次了 但我找不到任何好的资源 任何人都可以告诉如何创建自定义警报框对于安卓 我想要的是一个漂亮的警报框 其中有一些图像文本等 基本上是 mu 应用程序信息 我知道如何创建简单的警报框 如果可能 请指出任何示例代
  • 有没有办法从意外的“svn revert”中恢复?

    今天早上 我做了以下事情 搬起石头砸了自己的脚 开始对我的项目进行更改 对一堆文件进行了大量编辑 意识到我的方法完全错误 我需要重新开始 cd 到我的项目的顶层并执行 svn recursive revert 将我的本地沙箱恢复到更改前的状
  • 无法使用 install_github() 安装 IRkernel:Git 未安装?

    我试图让 R 在我的 Windows 机器上使用 Jupyter Notebook 我跟着IR内核教程 https irkernel github io installation 但是 我无法安装 GitHub 存储库 总是出现错误 ins
  • 避免在 VBA 代码中的 mySQL 查询中使用换行符

    我有以下内容VBA从数据库中提取数据 Sub Get Data from DWH Dim conn As New ADODB Connection Dim rs As New ADODB Recordset Dim dateVar As D
  • Visual Studio 和 TFS,检测 Visual Studio 外部的更改[重复]

    这个问题在这里已经有答案了 我正在使用带有 ASP NET Web 应用程序的 Visual Studio 2015 并安装了 Umbraco 和 uSync uSync 和 Umbraco 是什么并不重要 但是当我启动项目并在 Umbra
  • Kerberos - SPN 和密钥表

    我有一个项目 其中嵌入了启用了 SPNEGO 的 jetty 我希望能够在本地运行该项目以用于开发目的 启用 SPNEGO 我的问题是 SPN 和 keytab 是否与特定服务器相关联 或者我可以在服务的多个实例上使用同一组吗 Kerber
  • IHTTPModule 在 ASP.NET 中在 HTTP 和 HTTPS 之间切换

    我正在开发一个网站 其中包含需要通过 SSL 保护的部分 我已配置网站 以便在始终处于 SSL 模式时运行正常 我在 IE7 IE8 FireFox Safari Chrome 中看到 SSL 挂锁 为了实现 SSL 切换 我创建了一个实现
  • facebook redirect_uri 设置为 ios URL 方案

    我开始研究如何以编程方式使用 Facebook 我已经在我的应用程序中设置了 URL 方案 以便我可以使用 myappopenup 从浏览器打开它 然后我在 Facebook 上创建了一个应用程序 复制一个 AppId 并尝试如下所示 le
  • SVG中foreignObject的特征检测

    我在 SVG 中使用foreignObject 元素 但是 IE9 不支持该元素 我正在寻找一种检测此功能的方法 Modernizr 没有检测到此功能 似乎我无法像使用矩形 createSVGRect 一样使用 createSVGForei
  • 如何从 Perl 程序打开 Excel(程序,而不是文件)?

    我目前在 Windows 中有一个 perl 程序 它通过 Spreadsheet WriteExcel 创建并填充一个 excel 文件 但我希望在程序关闭时打开该文件 我尝试用谷歌搜索信息 但我发现的只是如何在 perl 中打开和读取
  • mysql 复杂的sql

    我今天早些时候提出了一个问题 并得到了很好的答复 效果很好 这个问题的第二部分从未得到答复 所以我再试一次 SELECT q id q question a question id a answer a correct FROM SELEC
  • 将列从 VARCHAR(MAX) 更改为 VARBINARY(MAX)

    我有一张桌子 上面有一个VARCHAR MAX 列 我需要将其更改为VARBINARY MAX 我尝试使用命令 ALTER TABLE TableName ALTER COLUMN ColumnName VARBINARY MAX 但我得到
  • 具有语法着色功能的 HTML 编辑器 jQuery 插件

    我正在寻找一个 jQuery 插件 它将显示用于 HTML 创作和编辑的文本区域 我正在寻找的东西 必须支持编写 HTML 而不是所见即所得的表示形式 必须像任何富客户端 IDE 一样在您键入时为 HTML 着色 应该是 jQuery 但原
  • Git 格式补丁查看器?

    有人正在向我发送由 git format patch 生成的补丁 是否有一个 GUI 在 Linux 上 可以打开这些 patch 文件 我已经尝试了很多 diff gui 但它们所做的只是比较两个现有的文件 文件夹 没有人可以显示补丁 除
  • 在 Python 子进程中使用 Windows 路径(指向可执行文件)

    我开始在安装了 cygwin Python 2 7 的 Windows 7 x64 计算机上开发一个小型 pdf 到 jpg 脚本 以下效果完美 import subprocess filename test subprocess chec
  • 如何在不锁定 GUI 的情况下将数千个项目添加到绑定集合中

    我有一个设置 其中可能有数千个项目 认为 3000 5000 个 将添加到ObservableCollection绑定到一些可视化界面 目前 添加它们的过程非常慢 大约 4 秒 1000 个项目 当然 GUI 在此期间没有响应 有什么好方法
  • 等待 5-10 秒,然后运行 ​​Outlook 代码

    我的 Outlook 规则中有 VBA 代码 我希望当我收到具有特定主题的电子邮件时 Outlook 开始运行脚本 但是 当收到电子邮件时 Outlook 立即开始运行代码以获取上一封电子邮件 这可能是因为电子邮件刚刚收到且尚未移动到特定文
  • Android:将额外内容从一个活动传递到另一活动

    我有一个填充到活动 Main java 的 JSON 文件 此活动显示了来自我的 JSON 条目上的 URL 的 3 个随机图像 我想要做的是 我的 JSON 上有 13 个不同的条目 每当我单击显示的随机图片时 它都会转到另一个活动 Pr