图像不显示但TextView内容正确

时间:2010-10-29 03:24:16

标签: android

我正在开发一个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

}

1 个答案:

答案 0 :(得分:0)

content to its ListView (via setContentView(getListView()).不要这样做。如果扩展listactivity,则构建视图。如果您不想这样做,请不要'扩展listview