удалить график из родительского - PullRequest
0 голосов
/ 03 июня 2011

Я хочу нарисовать график в 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);

}


1 Ответ

0 голосов
/ 03 июня 2011

Я считаю, что проблема здесь:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...