嘿,我正在尝试为一个看起来像(并且大部分都像是)调用日志的列表创建一个设计,如下所示:
为此我下载了源代码,我正在研究它以了解哪个类和xml文件实现它。
我发现这两个xml文件 recent_calls_list_item.xml :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="?android:attr/listPreferredItemHeight"
android:paddingLeft="7dip">
<com.psyhclo.DontPressWithParentImageView
android:id="@+id/call_icon" android:layout_width="wrap_content"
android:layout_height="match_parent" android:paddingLeft="14dip"
android:paddingRight="14dip" android:layout_alignParentRight="true"
android:gravity="center_vertical" android:src="@android:drawable/sym_action_call"
android:background="@drawable/call_background" />
<include layout="@layout/recent_calls_list_item_layout" />
另一个是 recent_calls_list_item_layout.xml :
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<View android:id="@+id/divider"
android:layout_width="1px"
android:layout_height="match_parent"
android:layout_marginTop="5dip"
android:layout_marginBottom="5dip"
android:layout_toLeftOf="@id/call_icon"
android:layout_marginLeft="11dip"
android:background="@drawable/divider_vertical_dark"
/>
<ImageView android:id="@+id/call_type_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_marginLeft="4dip"
/>
<TextView android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/divider"
android:layout_alignParentBottom="true"
android:layout_marginBottom="8dip"
android:layout_marginLeft="10dip"
android:textAppearance="?android:attr/textAppearanceSmall"
android:singleLine="true"
/>
<TextView android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"
android:layout_marginLeft="36dip"
android:layout_marginRight="5dip"
android:layout_alignBaseline="@id/date"
android:singleLine="true"
android:ellipsize="marquee"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textStyle="bold"
/>
<TextView android:id="@+id/number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/label"
android:layout_toLeftOf="@id/date"
android:layout_alignBaseline="@id/label"
android:layout_alignWithParentIfMissing="true"
android:singleLine="true"
android:ellipsize="marquee"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
<TextView android:id="@+id/line1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@id/divider"
android:layout_above="@id/date"
android:layout_alignWithParentIfMissing="true"
android:layout_marginLeft="36dip"
android:layout_marginBottom="-10dip"
android:textAppearance="?android:attr/textAppearanceLarge"
android:singleLine="true"
android:ellipsize="marquee"
android:gravity="center_vertical"
/>
我的活动就是这样:
public class RatedCalls extends ListActivity {
private static final String LOG_TAG = "RecentCallsList";
private TableLayout table;
private CallDataHelper cdh;
private TableRow row;
private TableRow row2;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recent_calls_list_item);
Log.i(LOG_TAG, "calling from onCreate()");
cdh = new CallDataHelper(this);
table = new TableLayout(getApplicationContext());
row = new TableRow(getApplicationContext());
startService(new Intent(this, RatedCallsService.class));
Log.i(LOG_TAG, "Service called.");
fillList();
}
public void onResume() {
super.onResume();
fillList();
}
public void fillList() {
List<String> ratedCalls = new ArrayList<String>();
ratedCalls = this.cdh.selectTopCalls();
setListAdapter(new ArrayAdapter<String>(RatedCalls.this,
android.R.id.list, ratedCalls));
ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(getApplicationContext(),
((TextView) view).getText(), Toast.LENGTH_LONG).show();
}
});
}
}
然后我尝试在android模拟器上运行它,然后LogCat返回了这样的错误:
引起:java.lang.RuntimeException:您的内容必须有一个ListView,其id属性为'android.R.id.list'
所以在 recent_calls_list_item.xml 里面我声明了这个:
<ListView android:id="@android:id/list" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_x="1px"
android:layout_y="1px">
</ListView>
现在声明我尝试在模拟器中运行,但LogCat返回另一个错误:
android.content.res.Resources $ NotFoundException:来自xml类型布局资源ID的文件#0x102000a
所以,我的问题是,为什么会发生这种情况?如果您有其他解决方案来实现这样的视图我正在尝试。
感谢。
答案 0 :(得分:97)
我遇到了同样的问题。我正在设置这样的文字:
statusView.setText(firstVisiblePosition);
问题是 firstVisiblePosition 是一个整数。编译器没有抱怨。
修正了它statusView.setText(""+firstVisiblePosition);
答案 1 :(得分:7)
听起来很蹩脚,但如果您使用Eclipse,您是否尝试过清理和重建项目?这解决了我遇到的类似问题。
答案 2 :(得分:6)
我也可以通过在使用:
时将Integer值转换为String来解决问题name.setText(name_value_needs_to_be_string);
其中name是TextView。
答案 3 :(得分:4)
编译器将您的int
参数解释为资源引用,并假设您正在调用:
public final void setText (int resourceId)
但你打算打电话
public final void setText (CharSequence text)
要解决此问题,请执行以下操作:
myTextView.setText(Integer.toString(myIntegerValue));
答案 4 :(得分:3)
将listView的id设置为
android:id="@id/android:list"
我不知道,是否
android:id="@android:id/list"
可以正常使用
答案 5 :(得分:0)
我通过将layout-land
目录中的XML文件复制到layout
(反之亦然)来解决了这个问题。有些设备有默认横向模式,有些设备有肖像。如果该模式中不存在该文件,则会抛出此异常。
答案 6 :(得分:0)
就我而言,我的 xml 中只有一些 id 不正确。检查布局中的 ID
错误参考:
<块引用>app:layout_constraintBottom_toBottomOf="@id/loginEmail"
真实参考:
<块引用>app:layout_constraintBottom_toBottomOf="@id/loginEmailEntryCode"