我需要一个示例,说明如何使用简单的html将标记的字符串显示到TextView中.我找到了"跨越fromHtml(字符串源代码)",但我不知道如何将其插入到我的java代码中.
这是我的Java:
package com.SorenWinslow.TriumphHistory;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
public class TriumphHistory extends ListActivity {
String[] HistoryList;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayAdapter<String> adapter;
HistoryList = getResources().getStringArray(R.array.history);
adapter = new ArrayAdapter<String> (this,R.layout.historylistlayout,HistoryList);
setListAdapter(adapter);
}
}
Run Code Online (Sandbox Code Playgroud)
以下是历史样本:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="history">
<item><b>1883</b><br/>Some stuff happened</item>
<item><b>1884</b><br/>Some more stuff happened <i>before</i> the other stuff
</item>
<resources>
Run Code Online (Sandbox Code Playgroud)
这是我的historylistlayout.xml:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:gravity="center_vertical"
android:textColor="#ffffff" …Run Code Online (Sandbox Code Playgroud) 我的应用程序中的自定义ArrayAdapter中出现了Nullpointerexception.我不知道为什么在这里提出Nullpointer.我无法重现这个例外.异常没有出现很长时间,我没有代码更改,所以这使它更奇怪.代码是:
private class MyAdapter<T> extends ArrayAdapter<String> {
private Map<String, String> selectedDevices;
public MyAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
BluetoothDbAdapter dbHelper = new BluetoothDbAdapter(context);
dbHelper.open();
selectedDevices = dbHelper.fetchAllDevicesAsMap();
dbHelper.close();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
CheckedTextView item = (CheckedTextView) view;
CharSequence text = item.getText();
if (selectedDevices.values().contains(text)) {
item.setChecked(true);
}
return item;
}
}
Run Code Online (Sandbox Code Playgroud)
在第一行的getView方法中引发了异常.我调试了我的应用程序并使用null参数调用了super.getView,但没有引发Nullpointerexception,所以它看起来super已经为null,但是怎么会这样?StackTrace是:
在显示java.lang.NullPointerException android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355)在android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)在de.hartig.abt.activity.BluetoothDeviceList $ MyAdapter.getView( BluetoothDeviceList.java:140)在android.widget.AbsListView.obtainView(AbsListView.java:1408)在android.widget.ListView.makeAndAddView(ListView.java:1727)在android.widget.ListView.fillDown(ListView.java:652 )在Android.widget.List.Loutout(AbsListView.java:1240)的android.widget.List.Loutout(ListView.java:1580)的android.widget.ListView.fillFromTop(ListView.java:709) .view.layout(View.java:7057)位于android.widget.Lineout.ayChildFrame的android.widget.FrameLayout.onLayout(FrameLayout.java:333)android.view.View.layout(View.java:7057) LinearLayout.java:1249)在android.view.View.View的android.widget.LinearLayout.onLayout(LinearLayout.java:1042)的android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125).layout(View.java:7057)位于android.view.View.Retout(MapLayout.java:333)的android.view.View.layout(View.java:7057),位于android.view.ViewRoot.performTraversals(ViewRoot. java:1045)在android.view.Handler.dispatchMessage(Handler.java:99)的android.view.ViewRoot.handleMessage(ViewRoot.java:1727)android.os.Looper.loop(Looper.java:123)at at android.app.ActivityThread.main(ActivityThread.java:4680)位于com.android的java.lang.reflect.Method.invoke(Method.java:521)的java.lang.reflect.Method.invokeNative(Native Method)中. internal.os.ZygoteInit …
我在ListView中设置单行的高度时遇到问题.我已经阅读了数百个论坛和博客文章,但似乎没有什么对我有用.
我有一个带有的ListView ArrayAdapter<Order>.根据Order对象的属性,使用不同的布局,每行具有不同的高度.但是,最后,所有行都具有相同的高度.我想这是给ArrayAdapter的构造函数的布局的高度.有人知道如何分别控制每行的高度吗?
谢谢你的回答,菲利普
我知道关于'getView几次调用'这个问题的问题很少,但我的问题却没什么不同.
我有一个自定义listView与自定义行(使用row_layout.xml).它通常运作良好.一开始我遇到了多次调用getView的问题,并且使用我在stackoverflow中看到的方法之一修复了它.(使用'usedPositions'数组).
现在,我在日志中看到这个场景:getView pos 0,getView pos 1,getView pos 0,getView pos 1.这导致我的行加倍.只有当我调用覆盖当前活动的新活动然后关闭该活动时才会发生这种情况.(例如,打开相机活动,然后关闭它).
我将展示我的代码:
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View row = convertView;
Toast toast = Toast.makeText(this.context, "getView " + position, 1000);
toast.show();
String pos = Integer.toString(position);
if (!usedPositions.contains(pos)) {
CardHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new CardHolder();
//holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
holder.txtCouponTitle = (TextView)row.findViewById(R.id.txtTitle);
holder.txtBusinessName = (TextView)row.findViewById(R.id.txtBusinessName);
row.setTag(holder);
}
else …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个ArrayAdapter用于我的自定义ListFragment.现在没有任何东西显示在ListFragment除了TextView说什么碎片号码之外.我在getView()我的适配器的方法中放了一个断点,它没有被调用.我搜索了不会被调用的原因,有些人似乎认为我的ListView被隐藏了,所以我尝试更改layout_height为wrap_content,但这不起作用.
此外,我一直在关注此开发人员页面中的代码:http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html
ListFragment:
public class HomeFragment extends ListFragment implements FragmentTitle
{
private int mNum = 0;
private String mTitle = "Home";
private ListView mListView;
private MyArrayAdapter mAdapter;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mNum = getArguments() != null ? getArguments().getInt("num") : 1;
InfoContainer temp = new InfoContainer("test1", "test2");
mAdapter = new MyArrayAdapter(getActivity(), android.R.id.list, temp);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, …Run Code Online (Sandbox Code Playgroud) android android-arrayadapter android-viewpager android-listfragment
我有一个关于在自定义数组适配器的getView方法中回收视图的问题不明确.
我理解元素是可以重用的,但是我怎么知道在if语句的第一部分中要实现什么,以及在第二部分中实现什么?
现在我有以下代码.由于删除了语句的第二部分中的代码,我得出了这个问题,这导致了前9个元素的列表,这些元素重复了多次而不是所有元素.我真的不知道究竟是什么造成的......
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
title = getItem(position).getTitle();
size = calculateFileSize(position);
txtTitle = (TextView) row.findViewById(R.id.txtTitle);
tvFileSize = (TextView) row.findViewById(R.id.tvFileSize);
txtTitle.setText(title);
tvFileSize.setText(size);
} else {
title = getItem(position).getTitle();
size = calculateFileSize(position);
txtTitle = (TextView) row.findViewById(R.id.txtTitle);
tvFileSize = (TextView) row.findViewById(R.id.tvFileSize);
txtTitle.setText(title);
tvFileSize.setText(size);
}
return row;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Fragments创建一个联系人列表应用程序,其中一个frag是联系人列表中的名称列表,另一个是剩余的详细信息.
这是显示名称列表的类
public class MyListFragment extends ListFragment {
private ContactStorage contactStorage = new ContactStorage();
public final static String TAG = "FRAGMENTS";
private MainActivity parent;
ArrayAdapter<String> adapter;
ArrayList<String> entries = new ArrayList<String>();
String array[];
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.list_layout, null);
parent = (MainActivity) getActivity();
entries = contactStorage.getContactListNames();
adapter = new ArrayAdapter<String>(getActivity().getApplicationContext(),
android.R.layout.simple_list_item_1, entries);
setListAdapter(adapter);
Log.d(TAG, "Adapter created");
array = contactStorage.getContactDetails();
return v;
}
@Override
public void onResume() {
super.onResume();
entries = contactStorage.getContactListNames();
adapter.notifyDataSetChanged(); …Run Code Online (Sandbox Code Playgroud) 如何修改此代码,以便将每个新对象添加到列表顶部而不是底部?我希望将最新的对象添加到列表的最顶部,以便在列表中向下滚动时看到较旧的对象.
public class StatusAdapter extends ArrayAdapter {
protected Context mContext;
protected List<ParseObject> mStatus;
public StatusAdapter(Context context, List<ParseObject> status) {
super(context, R.layout.homepage, status);
mContext = context;
mStatus = status;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(
R.layout.homepage, null);
holder = new ViewHolder();
holder.usernameHomepage = (TextView) convertView
.findViewById(R.id.usernameHP);
holder.statusHomepage = (TextView) convertView
.findViewById(R.id.statusHP);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
ParseObject statusObject = (ParseObject)mStatus.get(position);
// …Run Code Online (Sandbox Code Playgroud) 我有一个名为InteractiveArrayAdapter的自定义ArrayAdapter,它为列表视图中的每个项添加按钮和按钮侦听器.在适配器内部有一个getView方法,可以创建一个视图充气器.在这里是创建我的按钮并创建buttonListener的地方.单击该按钮时,我删除与该按钮关联的ArrayList中的元素.问题是我无法弄清楚如何从这个OnClick方法中调用notifyDataSetChange,或者通知适配器需要更新listView的另一种方法.
定制适配器:
public class InteractiveArrayAdapter extends ArrayAdapter<String> {
private final List<String> list;
private final Activity context;
private ListView listV;
public InteractiveArrayAdapter(Activity context, List<String> list) {
super(context, R.layout.rowbuttonlayout, list);
this.context = context;
this.list = list;
}
static class ViewHolder {
protected TextView text;
protected Button button;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(R.layout.rowbuttonlayout, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.text …Run Code Online (Sandbox Code Playgroud) 我有一个列表视图,有多个textview像这样:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="16dip"
android:textColor="#000000"
android:paddingLeft="10dip"
android:textStyle="bold"/>
<TextView
android:id="@+id/address"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="16dip"
android:textColor="#000000"
android:paddingTop="15dip"
android:paddingBottom="15dip"
android:paddingLeft="10dip"
android:textStyle="bold"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
我有一个POJO列表,它有一个name和address我希望列表视图中的每个项目都填充这些值.
我的POJO是这样的:
public class Person {
private String name;
private String address;
//getter setter
public String toString() {return name;}
}
Run Code Online (Sandbox Code Playgroud)
题
当我使用我的列表设置列表适配器时,如何设置名称和地址?
目前我这样做只设置名称:
setListAdapter(new ArrayAdapter<Person>(MyActivity.this, R.layout.list_text, R.id.name, personList));
Run Code Online (Sandbox Code Playgroud)