2013-07-16 5 views
0

EDIT:TextView всегда имеет нуль внутри фрагмента

Так я называю метод фрагментом.

public void setTheTextView(int id) { //id is the id of the tab 
    if(parsed==true) { //parsed - ensures if s, p1 are not null 
     DummySectionFragment dummy = new DummySectionFragment(); 
     if(id==0) dummy.setTheText(s, p1); 
     else if(id==1) dummy.setTheText(s, p2); 
     else dummy.setTheText(s, p3); 
    } 
} 

У меня есть следующий фрагмент, который отображает текст после завершения работы AsyncTask. Я прошел несколько потоков, из которых я мог бы собрать, что мы должны использовать представление, чтобы получить экземпляр TextView, а затем обновить его. Следовательно, я объявил

View rView 

К сожалению, это не имеет никакого эффекта, и TextView всегда равен нулю. Фрагмент присутствует внутри MainActivity.java, а исходный код - ниже.

public static class DummySectionFragment extends Fragment { 
    TextView tView; 
    View rView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     rView = inflater.inflate(R.layout.fragment_main_dummy, container, false); 
     tView = (TextView)rView.findViewById(R.id.section_label); 
     return rView; 
    } 

    public void setTheText(ArrayList<String> a, ArrayList<String> b) { 
     Log.d("bh","TextView:"+tView); //Always null here 
     if(tView != null) { 
      for(int i=0;i<6;i++) { 
       tView.append(a.get(i)+" "+b.get(i)+"\n\n"); 
      } 
     } 
    } 
} 
+0

Задача асинхронной присутствует в виде части MainActivity? Доступ к члену внутреннего класса из внешнего класса невозможен. –

+0

Да, AsyncTask присутствует как часть MainActivity. Однако я не вызываю метод setTheText из AsyncTask. Я просто отправляю некоторый текст из AsyncTask в метод внешнего класса, разбираю его там, вызываю setTheText() DummySectionFragment. В любом случае, не могли бы вы рассказать мне, что я должен сделать, чтобы исправить эту ошибку? – thandasoru

+0

U может вызвать метод setText из метода postExecute в AsyncTask – vivek

ответ

1

Ну, эта одна линия зафиксировала его.

DummySectionFragment dummy = (DummySectionFragment) mViewPager.getAdapter().instantiateItem(mViewPager, id); 

Из этой деятельности, я понял, что мне нужно прочитать о фрагментах подробно, прежде чем принимать его голову.

public void setTheTextView(int id) { 
    if(parsed==true) { 
    DummySectionFragment dummy = (DummySectionFragment) mViewPager.getAdapter().instantiateItem(mViewPager, id); 
    if(id==0) dummy.setTheText(s, p1); 
    else if(id==1) dummy.setTheText(s, p2); 
    else dummy.setTheText(s, p3); 
    } 
} 
0

Пожалуйста, попробуйте использовать следующий код, потому что он работает правильно в конце. // активность

общественного класса MainActivity расширяет FragmentActivity {

/** Called when the activity is first created. */ 

ListView listview; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    DummySectionFragment dummySectionFragment = new DummySectionFragment(); 
    FragmentTransaction fragmentTransaction = getSupportFragmentManager() 
      .beginTransaction(); 

    fragmentTransaction.replace(R.id.layout, dummySectionFragment); 
    fragmentTransaction.commit(); 
    /* 
    * RestClient rc = new RestClient(); 
    * 
    * // the account key might not work. Please insert your own set. 
    * ArrayList<Weather> list1 = rc.getPlaces("", ""); int index = 3; 
    * String[] listArray = new String[list1.size()]; StringBuilder sb = new 
    * StringBuilder(); int counter = 0; Log.e("N", "listArray::" + 
    * list1.size()); 
    * 
    * for (int i = 0; i < list1.size(); i++) { sb.append("\n\nEntry #: " + 
    * i); sb.append("\n" + "Title: \"" + list1.get(i).getTitle() + "\""); 
    * sb.append("\n" + "Publish Date: \"" + list1.get(i).getPubDate() + 
    * "\""); sb.append("\n" + "Condition: \"" + list1.get(i).getCondition() 
    * + "\""); sb.append("\n" + "Forecast: \"" + list1.get(i).getForecast() 
    * + "\""); 
    * 
    * listArray[counter] = sb.toString(); counter++; sb.delete(0, 
    * sb.capacity()); } Log.e("N", "listArray::" + listArray.length); 
    * 
    * listview.setAdapter(new ArrayAdapter<String>(this, 
    * android.R.layout.simple_list_item_1, listArray)); 
    * 
    * } 
    */ 
} 

}

// фрагмент

общественный класс DummySectionFragment расширяет фрагмент

{ TextView tView; Просмотр rView;

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    rView = inflater.inflate(R.layout.frg, container, false); 
    tView = (TextView) rView.findViewById(R.id.textView1); 
    ArrayList<String> arrayList = new ArrayList<String>(); 
    ArrayList<String> arrayList1 = new ArrayList<String>(); 
    for (int i = 0; i < 6; i++) { 
     arrayList.add("" + i); 

     arrayList1.add("" + i + 10); 
    } 
    setTheText(arrayList, arrayList1); 
    return rView; 
} 

public void setTheText(ArrayList<String> a, ArrayList<String> b) { 
    Log.d("bh", "TextView:" + tView); // Always null here 
    if (tView != null) { 
     for (int i = 0; i < 6; i++) { 
      tView.append(a.get(i) + " " + b.get(i) + "\n\n"); 
     } 
    } 
} 

}

Смежные вопросы