【问题标题】:How come when the activity is on ListActivity, it crashes but when it's activity, it works fine为什么活动在 ListActivity 上时,它会崩溃,但是当它处于活动状态时,它工作正常
【发布时间】:2011-07-27 03:27:40
【问题描述】:
public class test extends ListActivity{
/** Called when the activity is first created. */
protected Dialog mSplashDialog;
private static final String[] country = { "Iceland", "India", "Indonesia","Iran", "Iraq", "Ireland", "Israel", "Italy", "Laos", "Latvia","Lebanon", "Lesotho ", "Liberia", "Libya", "Lithuania","Luxembourg" };
private static final String[] curr = { "ISK", "INR", "IDR", "IRR", "IQD","EUR", "ILS", "EUR", "LAK", "LVL", "LBP", "LSL ", "LRD", "LYD","LTL ", "EUR"};    

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    MyStateSaver data = (MyStateSaver) getLastNonConfigurationInstance();
    if (data != null) {
        // Show splash screen if still loading
        if (data.showSplashScreen) {
            showSplashScreen();
        }
        setContentView(R.layout.main);        

        // Rebuild your UI with your saved state here
    } else { 
        showSplashScreen();
        setContentView(R.layout.main);
        ListView l1 = (ListView) findViewById(R.id.list);
        l1.setAdapter(new EfficientAdapter(this)); 
        l1.setItemsCanFocus(true);
        }
    }

@Override
public Object onRetainNonConfigurationInstance() {
    MyStateSaver data = new MyStateSaver();
    // Save your important data here

    if (mSplashDialog != null) {
        data.showSplashScreen = true;
        removeSplashScreen();
    }
    return data;
}

/**
 * Removes the Dialog that displays the splash screen
 */
protected void removeSplashScreen() {
    if (mSplashDialog != null) {
        mSplashDialog.dismiss();
        mSplashDialog = null;
    }
}

/**
 * Shows the splash screen over the full Activity
 */
protected void showSplashScreen() {
    mSplashDialog = new Dialog(this, R.style.SplashScreen);
    mSplashDialog.setContentView(R.layout.splashscreen);
    mSplashDialog.setCancelable(false);
    mSplashDialog.show();

    // Set Runnable to remove splash screen just in case
    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
      @Override
      public void run() {
        removeSplashScreen();
      }
    }, 3000);
}

/**
 * Simple class for storing important data across config changes
 */
private class MyStateSaver {
    public boolean showSplashScreen = false;
    // Your other important fields here
}
public static class EfficientAdapter extends BaseAdapter {
    private LayoutInflater mInflater;

public EfficientAdapter(Context context) {
    mInflater = LayoutInflater.from(context);   
}
public int getCount() {
    return country.length;
    }
public Object getItem(int position) {
    return position;
    }
public long getItemId(int position) {
    return position;
    }
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.listview, null);
        convertView.setClickable(true);
        convertView.setFocusable(true);

        holder = new ViewHolder();
        holder.text = (TextView) convertView.findViewById(R.id.TextView01);
        holder.text2 = (TextView) convertView.findViewById(R.id.TextView02);
        holder.text3 = (TextView) convertView.findViewById(R.id.TextView03);
        holder.text4 = (TextView) convertView.findViewById(R.id.TextView04);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.text.setText(curr[position]);
    holder.text2.setText(country[position]);
    holder.text3.setText(country[position]);
    holder.text4.setText(country[position]);


    return convertView;
    }
    static class ViewHolder {
        TextView text4;
        TextView text;
        TextView text2;
        TextView text3;
}
}
public void onClick(View v) {
    Toast.makeText(getApplicationContext(), "Zipcode: ", Toast.LENGTH_SHORT).show();

}
};

【问题讨论】:

  • 请检查 logcat 以在此处报告错误。
  • 您需要更具体地了解哪里出了问题,以及哪里出了问题。 Logcat 是一个好的开始(eclipse 屏幕的右上角。)

标签: android list android-activity


【解决方案1】:

如果你是从 ListActivity 扩展的,你需要在你的列表布局中添加 android:id="@android:id/list" 像这样

<LinearLayout android:orientation="vertical"
        android:layout_width="fill_parent" android:layout_height="wrap_content">
        <ListView android:id="@android:id/list" android:layout_width="fill_parent"
                android:layout_height="fill_parent" />
    </LinearLayout>

我可能是错的,但如果您提供 LogCat 跟踪和布局,我可以给您更好的建议。

【讨论】:

  • 我认为这也可能是问题所在。
【解决方案2】:

我认为您正在尝试在设置 ContentView 之前显示一个对话框

试着写这行setContentView(R.layout.main);之前showSplashScreen()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-20
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    相关资源
    最近更新 更多