Я относительно новичок в Android. Я пишу приложение, которое использует фрагмент в основном действии. Этот фрагмент также действует как приемник местоположения и реализует метод onLocationChange. Это связано с тем, что на основе изменений местоположения к этому фрагменту добавляются новые текстовые представления.Контекст изменяется на нуль за пределами метода onCreateView во фрагменте
Метод onCreateView во фрагменте имеет свой вид прокрутки, созданный, который добавляется к основному действию. В том же методе onCreateView я также фиксирую контекст и тег линейного макета, который присутствует в макете xml фрагмента, где я хотел бы вставить текстовые представления, которые создаются в методе onLocationChange.
Проблема, которую я вижу, является контекстом, а значения макета равны нулю в методе onLocationChanged и методе updateView. Используя отладчик, я подтвердил, что они имеют ненулевые значения только в onCreateMethod.
Вот фрагмент кода для класса фрагмента:
public class ResultsFragment extends Fragment implements LocationListener,OnCompleteListener {
private LoadPlaces loadPlaces;
HashMap<String, Double> map=new HashMap<String, Double>();
LinearLayout layout;
Context context;
Activity activity;
ScrollView view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view =(ScrollView)inflater.inflate(R.layout.scroll_view, container, false);
layout=(LinearLayout)view.findViewById(R.id.resultsView);
context=view.getContext();
return view;
}
@Override
public void onLocationChanged(final Location location) {
loadPlaces=new LoadPlaces(context); //context is null here
loadPlaces.setOnCompleteListener(this);
loadPlaces.execute(String.valueOf(location.getLatitude()),String.valueOf(location.getLongitude()));
}
private void updateResultView(){
String status=loadPlaces.getResultStatus();
if("OK".equals(status)){
for (Place p:loadPlaces.getPlacesResult()){
TextView txt=new TextView(context); //context is null here
txt.setText(p.name);
txt.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
layout.addView(txt); //layout is null here
}
}
}
@Override
public void onComplete(String result) {
updateResultView();
}
здесь фрагмента макета XML:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/results"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:fillViewport="true"
android:scrollbars="vertical"
android:scrollbarAlwaysDrawVerticalTrack="true"
android:clickable="true"
android:background="@color/grey"
android:layout_marginTop="25dip">
<LinearLayout android:id="@+id/resultsView"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</LinearLayout>
И это XML Основной вид деятельности по:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="30dip"
android:layout_gravity="center"
android:background="@color/background">
<fragment android:name="com.app.xxx.ResultsFragment"
android:id="@+id/headlines_fragment"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="0dp"/>
Для вашей информации деятельность, которая содержит фрагмент, никогда не приостанавливается/не прерывается. Он всегда отображается, пока служба определения местоположения работает в фоновом режиме. Поэтому в этом процессе я не думаю, что фрагмент уничтожается.
Неужели я неправильно подошел к этой проблеме? Есть ли лучший способ доступа или сохранения контекста фрагмента и использовать его позже? Любые советы помогут.
Заранее спасибо.
Это неверный контекст = view.getContext(); он должен быть context = getActivity(); –
, но зачем вам «контекстный контекст» и «активность активности»? «Активность» - это право «Контекста» ...? –
Мне известно, что действие - это контекст. Причина, по которой у меня был view.getContext, и две отдельные переменные для активности и контекста - это только для целей тестирования, так как я получал нулевые значения. В конечном итоге я буду использовать только один из них. – Sriprabha