将自定义 ListView 项传递给 Android 中的其他活动

Posted

技术标签:

【中文标题】将自定义 ListView 项传递给 Android 中的其他活动【英文标题】:Passing Custom ListView Items to Other Activities in Android 【发布时间】:2016-04-10 03:05:33 【问题描述】:

所以我的新闻应用程序有一个自定义列表视图,其中包含已解析的缩略图、标题和新闻 url,现在我希望使用意图将这三个项目传递给另一个活动,该意图必须显示列表中的特定新闻项目以及完整的新闻详细信息,请帮帮我..

【问题讨论】:

How do I pass data between activities on android?的可能重复 这可能对***.com/a/2091482/1140237有帮助 【参考方案1】:

只需使用Intent 将数据从ListView 传递到详细信息页面:

Intent i = new Intent(FirstScreen.this, DetailScreen.class);   
String title = "title";
String details = "details";
.....
i.putExtra("STRING_TITLE", title);
i.putExtra("STRING_DETAILS", details);
...

在这里传递你需要的数据。

在 DetailScreen.class 中接收 Intent

String titleString,....;
if (savedInstanceState == null) 
    Bundle extras = getIntent().getExtras();
    if(extras == null) 
        titleString= null;
     else 
        titleString= extras.getString("STRING_TITLE");
        ....
    
 else 
    titleString= (String) savedInstanceState.getSerializable("STRING_TITLE");
      .....

像这样从 TextView 中检索文本:

String title = ((TextView) view.findViewById(your title textview id)).getText().toString();
                Intent newsIntent = new Intent(getApplicationContext(), NewsDetails.class);
                newsIntent.putExtra("title",title);
                startActivity(newsIntent);

【讨论】:

兄弟,我如何将第一个活动的列表视图中的新闻标题获取到第二个活动,我已经尝试过你的方法,但它只显示最后一项的标题列表视图...我需要根据用户点击的列表来获取标题【参考方案2】:

传递自定义对象需要Parcelable实现,在Activity之间传递时。 下面的 Intent 类方法允许传递 Parcelable 对象。

putExtra(String name, Parcelable value)

以下方法允许传递完整的数据列表

putParcelableArrayListExtra(String name, ArrayList<? extends Parcelable> value)

您可以在博客中查看 parcelable 实现,http://www.survivingwithandroid.com/2015/05/android-parcelable-tutorial-list-class.html

您可以自己搜索类似的解决方案。

【讨论】:

【参考方案3】:

对于那些可能遇到类似问题的人,这就是我如何在同一个自定义列表视图中发送多个项目作为意图

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() 
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
            Intent newsIntent = new Intent(getApplicationContext(),NewsDetails.class);
            titleText = (TextView) view.findViewById(R.id.newstitle);
            TextView urlText = (TextView) view.findViewById(R.id.url);
            title = titleText.getText().toString();
            feedUrl = urlText.getText().toString();
            newsIntent.putExtra("title",title);
            newsIntent.putExtra("url",feedUrl);
            startActivity(newsIntent);
        
    ); 

【讨论】:

【参考方案4】:

试试这个传Url:

 @Override
    protected void onListItemClick(ListView l, View v, int position, long id) 


        Uri uri = Uri.parse(myRssFeed.getItem(position).getLink());
        Intent w = new Intent(this, Contenturl.class);
        w.putExtra(org.rss.mywindows.Contenturl.URL,uri.toString());
        startActivity(w);

在您想尝试的其他活动中:

        @Override
        public void onCreate(Bundle savedInstanceState) 
            super.onCreate(savedInstanceState);
            setContentView(R.layout.contenturl);

            String turl = getIntent().getStringExtra(URL);

            Uri feedUri = Uri.parse(turl);

标题:我认为它的字符串,所以它不难从意图传递。

如果你想传递对象,那么你应该在它上面使用 Parcelable Search,这样你会得到更好的方法,然后将所有的东西一一传递。

【讨论】:

让我试一试..! @a_lmukthar 发生了什么请告诉我。如果这个答案对你有帮助,那么别忘了放弃投票 @a_lmukthar 你在 json 中获取数据?? 是的,json 解析在列表活动中工作,我想要的是将列表视图中所选项目的标题发送到其他活动......现在我只得到最后一个项目的标题在列表视图中,无论在列表活动中单击的行... @a_lmukthar 你首先解析 Json 并在 Model 类中添加值,然后在 listview 中设置它以便你从模型类中获取项目值【参考方案5】:

我仍然是编程世界的新手,但在这种情况下,我所做的是将这些自定义列表视图对象作为“静态”属性存储在我创建的一个类中,该类纯粹用于存储我们在另一个活动中需要的东西。

然后启动您想去的活动,并使用存储为类的静态属性的自定义 ListView 对象,用于专用数据传输。

例如:您必须将 CustomListview 对象传递给另一个 Activity:

ActivityOne  

CustomListView clv = new CustomListView () ;
ObjectTransferClass.customListView = clv;

 


ObjectTransferClass 

public static MyCustomListView  customListView ;
// other objects to transfer can be declaerd here 





ActivityTwo 

MyCustomListView clvFromActivityOne = ObjectTransferClass.customListView;
// use clvFromActivityOne for further processes 
// do other things 


【讨论】:

您能说得更具体些吗? 如果您想从 ActivityTwo 访问 ActivityOne 中的自定义列表视图,则无需执行上述操作。相反,您可以在全局类中将自定义列表视图声明为静态,并且可以在任何您想要的位置访问它。 这是不正确的,建议在活动之间传递数据。 我已经尝试过之前回答过的方法,但是我得到的是列表视图中最后一个列表项的标题,而不管项目单击...即使我单击第一个项目,我得到最后一个项目的标题..这发生在所有情况下..如何使用 OnItemClickListener 中的位置变量获取标题?我该怎么做? 您可以在列表视图的 OnClickListener 上处理索引,其中必须有一个“索引”变量被传递到 onClick(View v, int index)

以上是关于将自定义 ListView 项传递给 Android 中的其他活动的主要内容,如果未能解决你的问题,请参考以下文章