ねえ、私はここに示すように、通話記録のように見える(そしてほとんどの場合そのように動作する)リストのデザインを作成しようとしています:
このために私はソースコードをダウンロードし、どのクラスとxmlファイルがそれを実装しているかを知るためにそれを研究しています。
そして、私はこの2つの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" />
もう1つは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:コンテンツには、id属性が「Android.R.id.list」であるListViewが必要です。
したがって、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からのファイル
それで、私の質問は、なぜこれが起こっているのですか?そして、このようなビューを実装するための別のソリューションがある場合は、私が試しています。
ありがとう。
listViewのIDをに設定します
Android:id="@id/Android:list"
わからない、
Android:id="@Android:id/list"
正しく動作します
私も同じ問題を抱えていました。私は次のようにテキストを設定していました:
statusView.setText(firstVisiblePosition);
問題は、firstVisiblePositionが整数であるということでした。コンパイラは文句を言わなかった。で修正
statusView.setText(""+firstVisiblePosition);
足りないように聞こえますが、Eclipseを使用している場合は、プロジェクトのクリーニングと再構築を試みましたか?それは私が抱えていた同様の問題を修正しました。
また、以下を使用しながら整数値を文字列に変換することで問題を解決することもできます。
name.setText(name_value_needs_to_be_string);
ここで、nameはTextViewです。
コンパイラーは、int
引数をリソース参照として解釈し、以下を呼び出していると想定します。
public final void setText (int resourceId)
しかし、あなたの意図は電話することでした
public final void setText (CharSequence text)
これを修正するには、次のようにします。
myTextView.setText(Integer.toString(myIntegerValue));
XMLファイルをlayout-land
ディレクトリからlayout
に(またはその逆に)コピーすることで、この問題を解決しました。一部のデバイスにはデフォルトのランドスケープモードがあり、その他のデバイスにはポートレートモードがあります。そのファイルがそのモードで存在しない場合、この例外がスローされます。