将自定义 ListView 项传递给 Android 中的其他活动
Passing Custom ListView Items to Other Activities in Android
这样我的新闻应用程序就有一个自定义列表视图,其中包含已解析的缩略图、标题和新闻 url,现在我希望使用必须显示特定内容的意图将这三个项目传递给另一个 activity新闻列表中的新闻条目以及完整的新闻详情,请帮助我..
我在编程领域还是个新手,但在这种情况下我所做的是将这些自定义列表视图对象作为 "static" 属性存储在我制作的 class 中,这纯粹是为了将我们需要的东西存储在另一个 activity.
中
然后启动您要访问的 activity 并使用存储为 class 的静态属性的自定义 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
}
只需使用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);
试试这个通过 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);
在其他 activity 你想试试这个:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contenturl);
String turl = getIntent().getStringExtra(URL);
Uri feedUri = Uri.parse(turl);
标题:我认为它是字符串,因此不难从意图传递。
如果你想传递 object 那么你应该在其上使用 Parcelable Search,这样你会得到更好的方法,然后将所有内容一一传递。
在 Activity 之间传递自定义对象需要 Parcelable 实现。
下面的 Intent class 方法允许传递 parcelable 对象。
putExtra(String name, Parcelable value)
及以下方法允许传递完整的数据列表
putParcelableArrayListExtra(String name, ArrayList<? extends Parcelable> value)
您可以在 http://www.survivingwithandroid.com/2015/05/android-parcelable-tutorial-list-class.html
的博客中查看 parcelable 实现
您可以自己google 类似的解决方案。
对于那些可能遇到类似问题的人,这就是我在同一个自定义列表视图中发送多个项目作为意图的方式
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);
}
});
这样我的新闻应用程序就有一个自定义列表视图,其中包含已解析的缩略图、标题和新闻 url,现在我希望使用必须显示特定内容的意图将这三个项目传递给另一个 activity新闻列表中的新闻条目以及完整的新闻详情,请帮助我..
我在编程领域还是个新手,但在这种情况下我所做的是将这些自定义列表视图对象作为 "static" 属性存储在我制作的 class 中,这纯粹是为了将我们需要的东西存储在另一个 activity.
中然后启动您要访问的 activity 并使用存储为 class 的静态属性的自定义 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
}
只需使用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
中接收 IntentString 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);
试试这个通过 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);
在其他 activity 你想试试这个:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contenturl);
String turl = getIntent().getStringExtra(URL);
Uri feedUri = Uri.parse(turl);
标题:我认为它是字符串,因此不难从意图传递。
如果你想传递 object 那么你应该在其上使用 Parcelable Search,这样你会得到更好的方法,然后将所有内容一一传递。
在 Activity 之间传递自定义对象需要 Parcelable 实现。 下面的 Intent class 方法允许传递 parcelable 对象。
putExtra(String name, Parcelable value)
及以下方法允许传递完整的数据列表
putParcelableArrayListExtra(String name, ArrayList<? extends Parcelable> value)
您可以在 http://www.survivingwithandroid.com/2015/05/android-parcelable-tutorial-list-class.html
的博客中查看 parcelable 实现您可以自己google 类似的解决方案。
对于那些可能遇到类似问题的人,这就是我在同一个自定义列表视图中发送多个项目作为意图的方式
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);
}
});