我正在开发一个Android应用程序,该应用程序在选择选项卡时显示项目列表,然后显示有关从列表中选择的项目的详细信息:
活性1 Tab1 - (意图) - >活动2:第1项 item2 - (意图) - >活动3:ImageView1 item3 TextView1 ... ImageButton1 ...
使用ImageViews,ImageButtons和TextViews显示详细信息。数据来自数据库查询,因此必须动态分配TextView文本和ImageView drawable。
数据库查询中的正确文本将分配给每个视图。当我在调试器中调试Activity3的onCreate方法中的代码时,我可以看到所有内容都被添加。
但是,只有当我选择ListActivity中的第一个项目时才会显示drawable。如果我选择另一个项目,则所有TextViews都会显示正确的信息,但不会显示ImageViews或ImageButtons的drawables。看起来只显示背景。
ImageButton drawables没有动态分配,只有ImageView drawables。 ImageButton drawable在TableLayout XML中设置,该XML与活动相关联。这是一个条目:
<TableRow android:id="@+id/row11" >
<ImageButton android:id="@+id/phonebutton"
android:maxHeight="50px"
android:maxWidth="50px"
android:background="@drawable/ic_phone"
android:adjustViewBounds="true"
style="?android:attr/buttonStyleSmall"
android:src="@drawable/phoneselector" >
</ImageButton >
<TextView android:id="@+id/phonenumber"/>
(注意 - 最初,我有android_drawable =“@ drawable / ic_phone”,然后尝试添加android:background =“@ drawable / ic_phone”,最后创建了以下选择器(phoneselector.xml): - 结束说明)
如果我再次选择第一个项目,则会在TextViews中显示其正确的ImageView可绘制文本以及正确的文本。属于其他项目的ImageView drawable在Activity2的ListView中显示没有问题。
代码为按钮成功设置了onClickListener(也在Activity3.onCreate中)。如果我点击可绘制的位置上显示的内容,将拨打电话号码。
代码为按钮成功设置了onClickListener(同样在DetailActivity.onCreate中)。
以前有人见过这样的事吗?我很感激任何帮助,找出问题所在。
以下是更多细节,因为我想知道问题是否与使用视图有关:
Activity1扩展了TabActivity并设置了包含FrameLayout和TabWidget的TabHost视图。 Activity1动态创建选项卡。
Activity2扩展了ListActivity并将内容设置为ListView(通过setContentView(getListView())。
当调用ListActivity.onListItemClick(选择列表中的项目)时,会创建一个新的Intent,其中包含Bundle中的标识符并启动Activity3。
已启动的活动(在Activity3.onCreate ...中)将内容设置为.xml文件中定义的TableLayout视图(通过setContentView(R.layout.details.xml)。
以下是Activity3.onCreate的代码:
光标c = null;
DatabaseHelper myDbHelper = null;
ImageButton button = null; TextView phoneText = null;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Resources res = getResources();
setContentView(R.layout.details);
Bundle bundle = this.getIntent().getExtras();
Integer id = (Integer) bundle.getInt("id");
myDbHelper = new DatabaseHelper(this);
c = myDbHelper.getWinery(id);
if (c != null) {
c.moveToFirst();
ImageView image1 = (ImageView) this.findViewById(R.id.iconimage);
String wholeString = c.getString(c.getColumnIndex("PhotoIcon"));
if (wholeString != null) { String[] splitString = wholeString.split(".jpg");
String sString = splitString[0];
int path = res.getIdentifier(sString, "drawable", "com.winerytour" );
Drawable drawImage1 = this.getResources().getDrawable(path);
drawImage1.setVisible(true, true); //added to try to fix problem
try {
image1.setImageDrawable(drawImage1);
image1.refreshDrawableState(););
} catch (RuntimeException e) {
e.getMessage();
}
image1.setAdjustViewBounds(true); }
.. set other TextView text in same way ...
phoneText = (TextView) this.findViewById(R.id.phonenumber);
String phone = c.getString(c.getColumnIndex("Telephone"));
phoneText.setText(phone);
button = (ImageButton) this.findViewById(R.id.phonebutton);
button.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {
performDial(); } });
((ImageButton) button).refreshDrawableState(); // attempt to fix problem
} // end c != null
}
答案 0 :(得分:0)
content to its ListView (via setContentView(getListView()).
不要这样做。如果扩展listactivity,则构建视图。如果您不想这样做,请不要'扩展listview