次のように、実行時にListView
を追加します。
MainMenue = getResources().getStringArray(R.array.Unit);
// remove all controls
LinearLayout formLayout = (LinearLayout)findViewById(R.id.submenue);
formLayout.removeAllViews();
menueview = new ListView(getApplicationContext());
menueview.setVisibility(ListView.VISIBLE);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.RIGHT;
menueview.setLayoutParams(params);
menueview.setAdapter(new submenueadapter(menueview.getContext(), MainMenue));
// Set the on Item
SetMenueOnClick() ;
formLayout.addView(menueview);
次に、次のようなアイテムクリックリスナーを追加します。
public void SetMenueOnClick() {
menueview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
final String text = (String) ((TextView)view).getText();
}
});
}
しかし、私はエラーがあります:
06-03 10:59:25.862: E/AndroidRuntime(14732): at Android.view.ViewRoot.handleMessage(ViewRoot.Java:2109)
Android.widget.LinearLayout cannot be cast to Android.widget.TextView
この行で:
final String text = (String) ((TextView)view).getText();
この号のテキストを入手する方法はありますか?アダプターは次のようになります。
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.shortmenue, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.contents);
textView.setText(values[position]);
// Change icon based on name
String s = values[position];
System.out.println(s);
rowView.setBackgroundResource(R.drawable.alternate_list_color);
return rowView;
}
およびR.layout.shortmenue
は単純で、以下のようなTextView
のみです。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="vertical" >
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:id="@+id/contents"
Android:textSize="34dp"
/>
</LinearLayout>
行はTextView
でラップされたLinearLayout
なので、次のようにします。
LinearLayout ll = (LinearLayout) view; // get the parent layout view
TextView tv = (TextView) ll.findViewById(R.id.contents); // get the child text view
final String text = tv.getText().toString();
同様の問題を実行しているが、linearLayoutをターゲットにしていることが確実な場合:
削除ファイルgen/your.app.package/R.Java。
これはxmlのバグが原因で発生します。R.Javaを削除すると、次のビルド/実行時に再作成されます。
TextViewをラップして同様の問題を解決したLinearLayoutにAndroid:id = "@ + id/my_layout"を追加しました。
私の場合、XMLにはTextViewが含まれていましたが、書き間違えました
final TextView text = (TextView) inflater.inflate(R.layout.item_text, layout);
の代わりに
final TextView text = (TextView) inflater.inflate(R.layout.item_text, layout, false);
置き換えることでこれを解決できます
final String text = (String) ((TextView)view).getText();
と
TextView temp= (TextView) view.findViewById(R.id.textView);
これは私のために働きます。
同じ問題が発生し、挿入されたビューオブジェクトの名前を変更しました。
このような:
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:id="@+id/newTextViewName"
Android:textSize="34dp"
/>