【发布时间】:2023-03-26 00:19:01
【问题描述】:
我想在 android 中绘制一个图表,为此我正在使用一个图表(我将一个 jar 文件导入我的应用程序),我将需要显示的值传递给该图表...
这个图表的问题是它在设置的activity中占据了全屏。
public void onCreate(){
LineView lv;
lv=new LineView(this);
}
我放在图表上的值是使用异步线程从数据库中读取的,所以我在哪里这样做:
protected void onProgressUpdate(String...values) {
setContentView(lv);
}
一遍又一遍地处理整个数据。
这是我的问题:
我尝试使用一个 xml 文件,其中我有一个空白的线性布局和一个按钮(我想在我的图表下方设置一个按钮),并且我试图将我的图表 lv 作为一个孩子传递给那个没有的线性布局占据我的整个屏幕:
xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:id="@+id/titlu"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="250px" >
/>
</LinearLayout>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Stop"
android:gravity="bottom"
android:id="@+id/stop"
/>
当我尝试 在 onCreate 中:
thatlinear=(LinearLayout)findViewById(R.id.titlu);
还有这个:
thatlinear.addView(lv); in my function onProgresssUpdate()
我收到一个错误,告诉我我的图表 lv 已经有一个父级,为了将它传递给其他父级,我必须删除初始父级。
所以...我这样做了:
ViewGroup v=(ViewGroup)(lv.getParent());
v.removeView(lv);
但是猜猜它没有这样工作......我在这一行遇到了 FC-java lang 空指针异常:
v.removeView(lv);
我尝试的最后一个是:
LinearLayout llay=new LinearLayout(this);
LinearLayout lytContainer = (LinearLayout) View.inflate(
this, R.layout.chart_speed, null);
lytContainer.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
llay.addView(lv);
chart_speed 是我上面贴的xml...
而且它也不是这样工作的......仍然是 FC。
问题:
如何继续将我的图表作为一个孩子传递给线性布局,这样它就不会填满我的整个屏幕......我可以在它下面放置按钮???
编辑:
我已经这样做了:
setContentView(R.layout.chart_speed);
ViewGroup thatlayout=(ViewGroup)findViewById(R.id.titlu);
thatlayout.addView(lv);
chart_speed-是我整个xml的名字 titlu 是我的 LinearLayout 的@+id...
这就是我的 logcat 显示的内容:
java.lang.NullPointerException
at com.kidroid.kichart.view.AxisView.GenerateValue(AxisView.java:112)
at com.kidroid.kichart.view.AxisView.drawAxisXY(AxisView.java:61)
at com.kidroid.kichart.view.LineView.onDraw(LineView.java:19)
at android.view.View.draw(View.java:6535)
at android.view.ViewGroup.drawChild(ViewGroup.java:1531)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
0 at android.view.ViewGroup.drawChild(ViewGroup.java:1529)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
at android.view.ViewGroup.drawChild(ViewGroup.java:1529)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1258)
at android.view.View.draw(View.java:6538)
EDIT2:
我已在我的 ProgressUpdate() 中完成此操作{
//初始化组件
thatlayoyt.add(lv);
}
几秒钟后它显示正确,但在那之后我得到了 FC:
java.lang.IllegalStateException:指定的孩子已经有一个父母。您必须先在孩子的父母上调用 removeView()。
at android.view.ViewGroup.addViewInner(ViewGroup.java:1861)
at android.view.ViewGroup.addView(ViewGroup.java:1756)
在 android.view.ViewGroup.addView(ViewGroup.java:1713)
最终版本,它可以工作...我认为不是很正确,但它可以工作:
ViewGroup 那个布局;
public void onCreate(Bundle savedInstanceState) {
thatlayout=(ViewGroup)findViewById(R.id.titlu);
}
protected void onProgressUpdate(String...values) {
//正在初始化
try{
ViewGroup v=(ViewGroup)(lv.getParent());
v.removeView(lv);
}
catch(Exception e)
{
e.printStackTrace();
}
thatlayout.addView(lv);
}
【问题讨论】:
标签: android view android-layout