- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了以下问题。将 Assets 文件夹中的本地 xml 文件解析为列表后,我想将此解析后的列表发送到 fragment ,该 fragment 应在 ListView 中显示此列表中的特定条目。
解析有效, ListView 有效,但我不确定如何通过 intent bundle extra 将列表发送到 fragment 以及如何在 fragment 中获得此 Intent 。
在这个例子中,我想发送 List<RowItem> pois
到 static fragment class RouteItemFragment
.错误在
pois = getActivity().getIntent().getParcelableArrayListExtra("pois");
留言:
inferred type for type parameter T is not within its bound. should implement android.os.parcelable
有人给我提示吗?
public class RouteView extends ActionBarActivity implements ActionBar.TabListener {
/**
* The {@link android.support.v4.view.PagerAdapter} that will provide
* fragments for each of the sections. We use a
* {@link FragmentPagerAdapter} derivative, which will keep every
* loaded fragment in memory. If this becomes too memory intensive, it
* may be best to switch to a
* {@link android.support.v4.app.FragmentStatePagerAdapter}.
*
*/
Integer citySave;
Integer routeSave;
String routeTitel;
private static int NUM_ITEMS = 2;
SectionsPagerAdapter mSectionsPagerAdapter;
ListView listView;
List<RowItem> pois;
/**
* The {@link ViewPager} that will host the section contents.
*/
ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_route_view);
Bundle b = getIntent().getExtras();
citySave = b.getInt("stadt");
routeSave = b.getInt("route");
routeTitel = b.getString("titel_route");
b.putString("titel_route",routeTitel);
b.putInt("route", routeSave);
RouteItemFragment fragobj = new RouteItemFragment();
fragobj.setArguments(b);
try {
PoiParser parser = new PoiParser();
pois = parser.parse(getAssets().open("poi_passau1.xml"));
b.putParcelableArrayList("pois", (java.util.ArrayList<? extends android.os.Parcelable>) pois);
} catch (IOException e) {
e.printStackTrace();
}
// Set up the action bar.
final ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Create the adapter that will return a fragment for each of the three
// primary sections of the activity.
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
// When swiping between different sections, select the corresponding
// tab. We can also use ActionBar.Tab#select() to do this if we have
// a reference to the Tab.
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
// For each of the sections in the app, add a tab to the action bar.
for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
// Create a tab with text corresponding to the page title defined by
// the adapter. Also specify this Activity object, which implements
// the TabListener interface, as the callback (listener) for when
// this tab is selected.
actionBar.addTab(
actionBar.newTab()
.setText(mSectionsPagerAdapter.getPageTitle(i))
.setTabListener(this));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.route_view, menu);
return true;
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
// When the given tab is selected, switch to the corresponding page in
// the ViewPager.
mViewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
/**
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to
* one of the sections/tabs/pages.
*/
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
// Return a PlaceholderFragment (defined as a static inner class below).
switch (position){
case 0:
return RouteItemFragment.newInstance(position);
case 1:
return MapFragment.newInstance(position);
default:
return PlaceholderFragment.newInstance(position);
}
}
@Override
public int getCount() {
// Show 2 total pages.
return NUM_ITEMS;
}
@Override
public CharSequence getPageTitle(int position) {
Locale l = Locale.getDefault();
switch (position) {
case 0:
return getString(R.string.title_section1).toUpperCase(l);
case 1:
return getString(R.string.title_section2).toUpperCase(l);
}
return null;
}
}
public static class RouteItemFragment extends ListFragment implements AdapterView.OnItemClickListener {
private static final String ARG_SECTION_NUMBER = "section_number";
ListView listView;
List<RowItem> pois;
public static RouteItemFragment newInstance(int sectionNumber) {
RouteItemFragment fragment = new RouteItemFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
public RouteItemFragment() {
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
pois = getActivity().getIntent().getParcelableArrayListExtra("pois");
CityListViewAdapter adapter = new CityListViewAdapter(getActivity(), R.layout.row_items, pois);
/**Collections.sort(pois, new Comparator<RowItem>() {
public int compare(RowItem s1, RowItem s2) {
return s1.getID().compareTo(s2.getID());
}
});*/
listView.setAdapter(adapter);
listView.setOnItemClickListener(this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_route_item, container, false);
TextView textView = (TextView) rootView.findViewById(R.id.textRouteitem);
listView = (ListView) rootView.findViewById(android.R.id.list);
textView.setText(String.format(getResources().getString(R.string.routeViewfragment)) + " "
+ getActivity().getIntent().getStringExtra("titel_route"));
return rootView;
}
@Override
public void onItemClick(AdapterView<?> adapterView, View parent, int position, long l) {
Intent intent = new Intent();
intent.setClass(getActivity(), PoiView.class);
RowItem pois = (RowItem) getListView().getItemAtPosition(position);
Bundle b = new Bundle();
//b.putInt("stadt", cities.getID());
b.putParcelableArrayList("titel_stadt", pois);
intent.putExtras(b);
startActivity(intent);
}
}
public static class MapFragment extends Fragment implements
GooglePlayServicesClient.ConnectionCallbacks,
GooglePlayServicesClient.OnConnectionFailedListener {
private static final String ARG_SECTION_NUMBER = "section_number";
private GoogleMap mMap;
/**
* Returns a new instance of this fragment for the given section
* number.
*/
public static MapFragment newInstance(int sectionNumber) {
MapFragment fragment = new MapFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void onResume() {
super.onResume();
setUpMapIfNeeded();
}
private void setUpMap() {
mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker"));
}
private void setUpMapIfNeeded() {
// Do a null check to confirm that we have not already instantiated the map.
if (mMap == null) {
// Try to obtain the map from the SupportMapFragment.
mMap = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map))
.getMap();
// Check if we were successful in obtaining the map.
if (mMap != null) {
setUpMap();
}
}
}
public MapFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_map, container, false);
setUpMapIfNeeded();
return rootView;
}
@Override
public void onConnected(Bundle bundle) {
}
@Override
public void onDisconnected() {
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
/**
* The fragment argument representing the section number for this
* fragment.
*/
private static final String ARG_SECTION_NUMBER = "section_number";
/**
* Returns a new instance of this fragment for the given section
* number.
*/
public static PlaceholderFragment newInstance(int sectionNumber) {
PlaceholderFragment fragment = new PlaceholderFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_route_view, container, false);
return rootView;
}
}
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent();
intent.setClass(RouteView.this, RouteChooseActivity.class);
Bundle b = new Bundle();
b.putInt("stadt", citySave);
intent.putExtras(b);
startActivity(intent);
finish();
}
public void onPause() {
super.onPause();
Bundle b = new Bundle();
b.putInt("stadt", citySave);
b.putInt("route", routeSave);
b.putString("route_titel",routeTitel);
finish();
}
public void onResume() {
super.onResume();
Bundle b = getIntent().getExtras();
citySave = b.getInt("stadt");
routeSave = b.getInt("route");
routeTitel = b.getString("route_titel");
}
public void onStop() {
super.onStop();
finish();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId()) {
case R.id.action_stadt:
setContentView(R.layout.activity_stadt);
Intent stadt = new Intent(RouteView.this, StadtActivity.class);
startActivity(stadt);
return true;
case R.id.action_route:
setContentView(R.layout.activity_route_choose);
Intent route = new Intent(RouteView.this, RouteChooseActivity.class);
startActivity(route);
return true;
case R.id.action_help:
setContentView(R.layout.activity_help);
Intent help = new Intent(RouteView.this, Help.class);
startActivity(help);
return true;
case R.id.action_exit:
moveTaskToBack(true);
System.exit(0);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
Poi解析器:
public class PoiParser {
List<RowItem> pois;
private RowItem poi;
private String text;
public PoiParser() {
pois = new ArrayList<RowItem>();
}
public List<RowItem> getPois() {
return pois;
}
public List<RowItem> parse(InputStream is) {
XmlPullParserFactory factory = null;
XmlPullParser parser = null;
try {
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
parser = factory.newPullParser();
parser.setInput(is, null);
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
String tagname = parser.getName();
switch (eventType) {
case XmlPullParser.START_TAG:
if (tagname.equalsIgnoreCase("poi")) {
poi = new RowItem();
}
break;
case XmlPullParser.TEXT:
text = parser.getText();
break;
case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase("poi")) {
pois.add(poi);
} else if (tagname.equalsIgnoreCase("image")) {
poi.setImage(text);
} else if (tagname.equalsIgnoreCase("id")) {
poi.setID(Integer.parseInt(text));
} else if (tagname.equalsIgnoreCase("name")) {
poi.setTitle(text);
} else if (tagname.equalsIgnoreCase("desc")) {
poi.setDesc(text);
} else if (tagname.equalsIgnoreCase("imagedesc")) {
poi.setImageDesc(text);
} else if (tagname.equalsIgnoreCase("infotext")) {
poi.setInfoText(text);
} else if (tagname.equalsIgnoreCase("audio")) {
poi.setAudioPoi(text);
} else if (tagname.equalsIgnoreCase("latitude")) {
poi.setLatitudePoi(Double.parseDouble(text));
} else if (tagname.equalsIgnoreCase("longitude")) {
poi.setLongitudePoi(Double.parseDouble(text));
}
break;
default:
break;
}
eventType = parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return pois;
}
}
行项
public class RowItem extends ArrayList<Parcelable> {
private String Bild;
private String Titel;
private String Desc;
private String imageDesc;
private String infoText;
private String audioPoi;
private int ID;
private double latitudePoi;
private double longitudePoi;
public RowItem() {
this.Bild = Bild;
this.Titel = Titel;
this.Desc = Desc;
this.imageDesc = imageDesc;
this.infoText = infoText;
this.audioPoi = audioPoi;
this.ID = ID;
this.latitudePoi = latitudePoi;
this.longitudePoi = longitudePoi;
}
public int getID() {return ID;}
public void setID(int ID) {this.ID = ID;}
public double getLatitudePoi() {return latitudePoi;}
public void setLatitudePoi(double latitudePoi) {this.latitudePoi = latitudePoi;}
public double getLongitudePoi() {return longitudePoi;}
public void setLongitudePoi(double longitudePoi) {this.longitudePoi = longitudePoi;}
public String getImage() {
return Bild;
}
public void setImage(String imageId) {
this.Bild = imageId;
}
public String getDesc() {
return Desc;
}
public void setDesc(String desc) {
this.Desc = desc;
}
public String getTitle() {
return Titel;
}
public void setTitle(String title) {
this.Titel = title;
}
public String getImageDesc() {return imageDesc;}
public void setImageDesc(String imageDesc){this.imageDesc = imageDesc;}
public String getInfoText() {return infoText;}
public void setInfoText(String infoText) {this.infoText = infoText;}
public String getAudioPoi() {return audioPoi;}
public void setAudioPoi(String audioPoi) {this.audioPoi = audioPoi;}
@Override
public String toString() {
return Titel + "\n" + Desc;
}
}
最佳答案
您应该为 RowItem 实现 Parcelable 接口(interface)。并更改您的代码
b.putParcelableArrayList("pois", pois);
public class RowItem implements Parcelable {
private String Bild;
private String Titel;
private String Desc;
private String imageDesc;
private String infoText;
private String audioPoi;
private int ID;
private double latitudePoi;
private double longitudePoi;
public RowItem() {
}
public RowItem(Parcel in) {
Bild = in.readString();
Titel = in.readString();
Desc = in.readString();
imageDesc = in.readString();
infoText = in.readString();
audioPoi = in.readString();
ID = in.readInt();
latitudePoi = in.readDouble();
longitudePoi = in.readDouble();
}
public int getID() {return ID;}
public void setID(int ID) {this.ID = ID;}
public double getLatitudePoi() {return latitudePoi;}
public void setLatitudePoi(double latitudePoi) {this.latitudePoi = latitudePoi;}
public double getLongitudePoi() {return longitudePoi;}
public void setLongitudePoi(double longitudePoi) {this.longitudePoi = longitudePoi;}
public String getImage() {
return Bild;
}
public void setImage(String imageId) {
this.Bild = imageId;
}
public String getDesc() {
return Desc;
}
public void setDesc(String desc) {
this.Desc = desc;
}
public String getTitle() {
return Titel;
}
public void setTitle(String title) {
this.Titel = title;
}
public String getImageDesc() {return imageDesc;}
public void setImageDesc(String imageDesc){this.imageDesc = imageDesc;}
public String getInfoText() {return infoText;}
public void setInfoText(String infoText) {this.infoText = infoText;}
public String getAudioPoi() {return audioPoi;}
public void setAudioPoi(String audioPoi) {this.audioPoi = audioPoi;}
@Override
public String toString() {
return Titel + "\n" + Desc;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(Bild);
dest.writeString(Titel);
dest.writeString(Desc);
dest.writeString(imageDesc);
dest.writeString(infoText);
dest.writeString(audioPoi);
dest.writeInt(ID);
dest.writeDouble(latitudePoi);
dest.writeDouble(longitudePoi);
}
@SuppressWarnings("rawtypes")
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public RowItem createFromParcel(Parcel in) {
return new RowItem(in);
}
public RowItem[] newArray(int size) {
return new RowItem[size];
}
};
关于android - 将列表从 Activity 发送到 fragment android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25154973/
我正在使用 voip 推送通知制作 ios 应用程序。 我想从 Node js 发送 voip 推送通知,但不是很好。 我阅读了本教程 CallKit iOS Swift Tutorial for V
我编写了一个服务器,当浏览器尝试连接到某些站点时,它会检查黑名单并发回 404,但是当我调用 send() 时没有错误,但消息不会出现在网络上浏览器,除非我关闭连接? 有什么建议吗? 接受来自浏览器的
#include int main() { char c = getchar(); //EOF (ctrl + d ) while( ( c = getchar() ) != '?'
我正在尝试使用MailMessage对象通过PowerShell发送电子邮件。该脚本使用Import-CSV来使用文件,然后在电子邮件正文中使用ConvertTo-HTML。由于我要发送的电子邮件客户
我需要创建一个脚本,每 30 秒对网络流量进行一次采样并存储发送/接收的字节。该数据随后用于绘制图形。我编写了一个在 Windows 2012 上完美运行的程序,但我意识到某些 cmdlet 在以前的
我正在运行“autoit3.chm”文件。当它运行时,我想发送一个向下键箭头,但它不起作用: $file = FileGetShortName("C:\Users\PHSD100-SIC\Deskto
当我使用网络浏览器测试我的程序时,我可以很好地写入套接字/FD,所以我决定循环它并在连接中途切断连接,我发现了一个问题。 send() 能够在套接字不可用时关闭整个程序。我认为问题在于该程序陷入了第
我正在运行“autoit3.chm”文件。当它运行时,我想发送一个向下键箭头,但它不起作用: $file = FileGetShortName("C:\Users\PHSD100-SIC\Deskto
所以我试图向自己发送数据并接收数据然后打印它,现在我已经测试了一段时间,我注意到它没有发送任何东西,事实上,也许它是,但我没有正确接收它,我需要这方面的帮助。 这就是我用来发送数据的
问题:开发人员创建自己的序列化格式有多常见?具体来说,我使用 java 本质上将对象作为一个巨大的字符串发送,并用标记来分隔变量。 我的逻辑:我选择这个是因为它几乎消除了语言依赖性(忽略java的修改
我必须在 Linux 上编写一个应用程序,该应用程序需要与具有自定义以太网类型的设备进行通信。甚至在如何编写这样的应用程序中也有很多解决方案。一个缺点是需要 root 访问权限(AFAIK)。之后释放
我有一个包含三个单选按钮选项的表单。我需要将表单数据提交到另一个文件,但由于某种原因,发送的数据包含所选单选按钮的值“on”,而不是 value 属性的值。 我尝试通过 post() 函数手动操作和发
基本上我想实现这样的目标: Process 1 Thread 1 Receive X from process 2 Thread 2 Receive Y from proces
我目前正在 Google App Engine 上开发一个系统,对它还很陌生,我正在使用 Java 平台进行开发。我在 servlet 之间发送 session 对象时遇到问题。我已经在 appeng
当我尝试将“this”(触发的元素)作为参数发送给函数时,函数收到“Object[Document build.php]”作为参数,而不是触发的元素。请让我知道我的错误: function set(a
我正在寻找让我的应用响应联系人 > 发送的魔法咒语。我希望能够接收联系人的 URI 以便检索联系人。谁有 list 过滤器/代码 fragment 吗? 最佳答案 我没有睾丸,但您可以尝试基于 ACT
关于我心爱的套接字的另一个问题。我先解释一下我的情况。之后我会告诉你是什么困扰着我。 我有一个客户端和一个服务器。这两个应用程序都是用 C++ 编写的,实现了 winsock2。连接通过 TCP 和
我看到了这篇文章 http://www.eskimo.com/~scs/cclass/int/sx5.html 但这部分让我感到困惑:如果我们已经使用 send_array 或 send_array_
我对这行代码有疑问。我必须将一个数据包带到一个端口并重新发送到接口(interface)(例如:eth0)。我的程序成功地从端口获取数据包,但是当我重新发送(使用 send())到接口(interfa
我正在尝试编写一个 X11 输入驱动程序,它可以使用我的 Android 手机上的触摸屏来移动和单击鼠标。我可以正常移动鼠标,但我无法让应用程序正确识别点击。我当前的代码位于 https://gist
我是一名优秀的程序员,十分优秀!