我想在android中绘制一个图表,为此我正在使用一个图表(我在我的应用程序中导入一个jar文件),我传递的值需要显示...
此图表的问题在于它占据了设置的活动的全屏。
public void onCreate(){
LineView lv;
lv=new LineView(this);
}
我在图表上放置的值是使用异步线程从DB中获取的,所以我这样做:
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"
/>
当我尝试的时候 in 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。
问题:
如何继续将我的图表作为孩子传递到LInear布局,这样它就不会填满我的整个屏幕......我可以在它下面放置按钮???
编辑:
我做到了这一点:
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 thatlayout;
public void onCreate(Bundle savedInstanceState){
thatlayout =(的ViewGroup)findViewById(R.id.titlu);
}
protected void onProgressUpdate(String ... values){
// initalizating
try{
ViewGroup v=(ViewGroup)(lv.getParent());
v.removeView(lv);
}
catch(Exception e)
{
e.printStackTrace();
}
thatlayout.addView(lv);
}
答案 0 :(得分:0)
我相信麻烦就在这里:
protected void onProgressUpdate(String...values) {
setContentView(lv); //HERE
}
您只需在setContentView
中拨打onCreate
一次。之后,您可以实例化LineView
(我想这是图表)并将其添加到主布局。
// in onCreate
setContentView(R.layout.main);
LineView lv = new LineView();
ViewGroup main = (ViewGroup)findViewById(R.id.main);
main.addView(lv);
我假设您的主要布局在main.xml
中定义,根布局有android:id="@+id/main
。