Я хочу нарисовать график в Android, и для этого я использую диаграмму (я импортирую в свое приложение файл jar), которому я передаю значение, которое нужно показать ...
Проблема с этим графиком заключается в том, что он занимает весь экран в заданном задании.
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, который я разместил выше ...
И это тоже не сработало .... все же ФК.
Вопрос:
Как поступить, чтобы в детстве передать мою диаграмму в этот макет LInear, чтобы он не заполнил весь мой экран ... и я мог бы разместить под ним кнопки ???
EDIT:
Я сделал это:
setContentView(R.layout.chart_speed);
ViewGroup thatlayout=(ViewGroup)findViewById(R.id.titlu);
thatlayout.addView(lv);
chart_speed - это имя всего моего xml
titlu - это @ + id моего LinearLayout ...
И вот что показывает мой 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)
at android.view.ViewGroup.addView (ViewGroup.java:1713)
ЗАКЛЮЧИТЕЛЬНАЯ ВЕРСИЯ, и это работает ... Я не думаю, что это очень правильно, но это работает:
ViewGroup thatlayout;
public void onCreate (Bundle saveInstanceState) {
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);
}