0

У меня есть TabActivity, который имеет две вкладки. Я загружаю отдельную деятельность на каждой вкладке (мероприятие A & B). Активность А, загруженная в вкладку 1, имеет некоторые элементы управления и a ListView. Я использую AsyncTask для загрузки данных из веб-службы для этого ListView. Я должен был загрузить другое действие, когда пользователь нажал на элемент ListView, но этот новый Activity C должен быть загружен в одну и ту же выбранную вкладку.Как использовать asynctask в android-support-v4.jar Фрагмент?

Я искал в Интернете и обнаружил, что могу использовать ActivityGroup ... но в то же время я нашел, что его устарело. Таким образом, использование совместимости Android-поддержка-v4 Frangment были предложены ..

Я скачал, что андроид-поддержка-v4.jar и посмотрел на FragmentTabs образец, я получил его, как я могу использовать фрагменты даже в Android 2.1 .... поэтому я заменил две деятельности, которые я показывал в закладках, с двумя Фрагменты

Но теперь я не знаю, как обращаться с последующей ситуации:

  1. ListView & Другие элементы управления не отображаются, когда я запускаю следующий код.

  2. я должен позвонить AsyncTask ... это займет время, чтобы получить & синтаксического анализа XML-данных с сервера и фрагмента onCreateView называется раньше ... так как я могу установить ListView в фрагмента после его onCreateView называется?

  3. После элемента ListView щелкает, мне придется загрузить другой фрагмент C в той же вкладке ... как я могу этого достичь?

Код для моего фрагмента выглядит следующим образом:

public class UpdatesFragment extends Fragment implements IFeedReceiver { 
ArrayList<Feed> _feeds; 
Integer _currentPage = 1; 
ListView _lvUpdates; 
UserMessage _userMessage; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    getFeeds(); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.updates, container, false); 
    this._lvUpdates = (ListView)v.findViewById(R.id.listUpdates); 

    return v; 
} 

private void getFeeds() { 
    FeedsCollectorAsyncTask task = new FeedsCollectorAsyncTask(
      getActivity(), this._currentPage); 
    task.execute(); 
} 

//This method is called from AsyncTask upon receiving & parsing data. So i m trying to populate my ListView here 
@Override 
public void onFeedReceived(ArrayList<Feed> feeds) { 
    FeedsAdapter adapter = new FeedsAdapter(getActivity(), 
      R.layout.feed_list_item, this._feeds); 

    this._lvUpdates.setAdapter(adapter); 

    // Load detail on item click 
    this._lvUpdates.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int index, 
       long id) { 

     } 
    }); 
} 

}

Главная Tab активность XML выглядит следующим образом.

<?xml version="1.0" encoding="utf-8"?> 
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/tabhost" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="5dp">   
    <FrameLayout 
     android:id="@android:id/tabcontent" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_weight="0"/> 
    <FrameLayout 
     android:id="@+android:id/realtabcontent" 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"/> 

    <TabWidget 
     android:id="@android:id/tabs" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="-6dp"/> 
</LinearLayout> 

И наконец ...

public class PlayMakerActivity extends FragmentActivity { 
/** Called when the activity is first created. */ 
TabHost tabHost; 
TabManager mTabManager; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Resources res = getResources(); // Resource object to get Drawables 
    // TabHost tabHost = getTabHost(); // The activity TabHost 
    tabHost = (TabHost) findViewById(android.R.id.tabhost); 
    tabHost.setup(); 

    mTabManager = new TabManager(this, tabHost, R.id.realtabcontent); 

    mTabManager.addTab(tabHost.newTabSpec("Upudates").setIndicator("Updates"), 
      UpdatesFragment.class, null);  
} 
} 

//also included the following AS It IS 
public static class TabManager implements TabHost.OnTabChangeListener { 
    .... 
    .... 
    .... 
} 

Вы можете указать мне на какой-то пример. Ваша помощь очень ценится !.

ответ

1

Я новичок в разработке Android, но я столкнулся с некоторыми из этих проблем с преобразованием в фрагменты, поэтому я постараюсь как можно лучше помочь.

  1. Этот вопрос связан со вторым, я думаю, поэтому я просто проигнорирую его и надеюсь, что ответ 2 достаточно хорошо его рассмотрит.

  2. Я столкнулся с аналогичной ситуацией, когда я преобразовал операцию, которая использовала AsyncTask во фрагмент. Я не уверен, что это хорошая практика, но я просто переместил свою логику, которая первоначально была в onCreate (в вашей ситуации, в ListView и вызов getFeeds()) в метод onCreateView.

  3. Что касается обхода фрагментов, я использовал базовую функцию FragmentActivity, которая устанавливает первый фрагмент в соответствующий контейнер в макете FragmentActivitiy. Если вы хотите загрузить другой фрагмент, я считаю, что вы обратитесь к FragmentManager FragmentActivity, запустите новую транзакцию и добавьте новый фрагмент. android developer website полностью объясняет это.

Если Вы желаете, чтобы начать новый фрагмент непосредственно из открытого фрагмента, то вы хотите, чтобы ссылаться на хост FragmentActivity с помощью getActivity() в первую очередь. Например:

FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();

Надеется, что это помогает!

Для всех остальных: я также новичок в ответе на вопрос, поэтому дайте мне знать, если я должен внести изменения в будущие ответы, которые я публикую.

+0

Большое спасибо за этот подробный ответ. У меня были другие проблемы, но одно из их решений включало то, что предложили. Так что я буду принимать его как ответ .. еще раз спасибо – Aamir

+0

Без проблем, рад, что я мог бы помочь каким-то образом парню. – RonMon

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