Вкладки фрагментов не отображаются

В моей программе я показываю многоуровневый список, но всякий раз, когда я вызываю другое действие, вкладки фрагментов не появляются.

Я использую этот замечательный учебник: http://www.androidbegin.com/tutorial/android-actionbarsherlock-viewpager-tabs-tutorial/

См. ниже изображения, 1-й уровень ListView:

введите здесь описание изображения

2-й уровень ListView:

введите здесь описание изображения

ListCategoryFragment.xml:-

 public class ListCategoryFragment extends SherlockFragment implements OnItemClickListener {

    ListView lview3;
    ListCategoryAdapter adapter;

    private ArrayList<Object> itemList;
    private ItemBean bean;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        // Get the view from fragmenttab1.xml
        View view = inflater.inflate(R.layout.fragment_category_tab, container, false);
        prepareArrayList();
        lview3 = (ListView) view.findViewById(R.id.listView1);
        adapter = new ListCategoryAdapter(getActivity(), itemList);
        lview3.setAdapter(adapter);
        lview3.setOnItemClickListener(this);

    return view;
}

private static final int categoryFirst = 0;
private static final int categorySecond = 1;
private static final int categoryThird = 2;

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

    // Set up different intents based on the item clicked: 
    switch (position)
    {
        case categoryFirst:
         Intent intent1 = new Intent(getActivity(), ListItemActivity.class);
         intent1.putExtra("category", "Category - 1");
         startActivity(intent1);    
         break;

        case categorySecond:
         Intent intent2 = new Intent(getActivity(), ListItemActivity.class);
         intent2.putExtra("category", "Category - 2");
         startActivity(intent2);    
         break;

        case categoryThird:
         Intent intent3 = new Intent(getActivity(), ListItemActivity.class);
         intent3.putExtra("category", "Category - 3");
         startActivity(intent3);    
         break;

        default:
         break;
    }
}

public void prepareArrayList()
{
    itemList = new ArrayList<Object>();

    AddObjectToList("Category - 1");
    AddObjectToList("Category - 2");
    AddObjectToList("Category - 3");
}

// Add one item into the Array List
public void AddObjectToList(String title)
{
    bean = new ItemBean();
    bean.setTitle(title);
    itemList.add(bean);
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    setUserVisibleHint(true);
}

}

ListItemActivity.java:-

public class ListItemActivity extends SherlockFragmentActivity {


static String URL = "http://www.site.url/tone.json";

static String KEY_CATEGORY = "item";
static final String KEY_TITLE = "title";

ListView list;
ListItemAdapter adapter;

/** Called when the activity is first created. */
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    getActionBar().setDisplayHomeAsUpEnabled(true);
    setContentView(R.layout.activity_item_list);

    final ArrayList<HashMap<String, String>> itemsList = new ArrayList<HashMap<String, String>>();
    list = (ListView) findViewById(R.id.listView1);
    adapter = new ListItemAdapter(this, itemsList);
    list.setAdapter(adapter);

    Bundle bdl = getIntent().getExtras();
    KEY_CATEGORY = bdl.getString("category");

    if (isNetworkAvailable()) {
        new MyAsyncTask().execute();
    } else {

        AlertDialog alertDialog = new AlertDialog.Builder(ListItemActivity.this).create();
        alertDialog.setMessage("The Internet connection appears to be offline.");
        alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        alertDialog.show();
    }
}

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.main, menu);

    return super.onCreateOptionsMenu(menu);
}

 private Intent getDefaultShareIntent(){
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("text/plain");
        intent.putExtra(Intent.EXTRA_SUBJECT, "SUBJECT");
        intent.putExtra(Intent.EXTRA_TEXT, "TEXT");
        startActivity(Intent.createChooser(intent, "Share via"));
        return intent;
    }

/** The event listener for the Up navigation selection */
@Override
public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) {

    switch(item.getItemId())
    {
        case android.R.id.home:
            finish();
            break;

        case R.id.menu_item_share:
            getDefaultShareIntent();
            break; 
    }
    return true;
}

private boolean isNetworkAvailable() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
    NetworkInfo info = cm.getActiveNetworkInfo();
    return (info != null);
}

class MyAsyncTask extends
        AsyncTask<String, Integer, ArrayList<HashMap<String, String>>> {
    private ProgressDialog progressDialog = new ProgressDialog(
            ListItemActivity.this);

    @Override
    protected void onPreExecute() {
        progressDialog.setMessage("Loading, Please wait.....");
        progressDialog.show();
    }

    final ArrayList<HashMap<String, String>> itemsList = new ArrayList<HashMap<String, String>>();

    @Override
    protected ArrayList<HashMap<String, String>> doInBackground(
            String... params) {
        HttpClient client = new DefaultHttpClient();
        // Perform a GET request for a JSON list
        HttpUriRequest request = new HttpGet(URL);
        // Get the response that sends back
        HttpResponse response = null;
        try {
            response = client.execute(request);
        } catch (ClientProtocolException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        // Convert this response into a readable string
        String jsonString = null;
        try {
            jsonString = StreamUtils.convertToString(response.getEntity()
                    .getContent());
        } catch (IllegalStateException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        // Create a JSON object that we can use from the String
        JSONObject json = null;
        try {
            json = new JSONObject(jsonString);
        } catch (JSONException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        try {

            JSONArray jsonArray = json.getJSONArray(KEY_CATEGORY);

            for (int i = 0; i < jsonArray.length(); i++) {

                HashMap<String, String> map = new HashMap<String, String>();
                JSONObject jsonObject = jsonArray.getJSONObject(i);

                map.put("id", String.valueOf(i));
                map.put(KEY_TITLE, jsonObject.getString(KEY_TITLE));
                itemsList.add(map);
            }
            return itemsList;
        } catch (JSONException e) {
            Log.e("log_tag", "Error parsing data " + e.toString());
        }
        return null;
    }


    @Override
    protected void onPostExecute(ArrayList<HashMap<String, String>> result) {
        list = (ListView) findViewById(R.id.listView1);
        adapter = new ListItemAdapter(ListItemActivity.this, itemsList);
        list.setAdapter(adapter);

        TextView lblTitle = (TextView) findViewById(R.id.text);
        lblTitle.setText(KEY_CATEGORY);

        this.progressDialog.dismiss();
        list.setOnItemClickListener(new OnItemClickListener() {

            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {

                HashMap<String, String> map = itemsList.get(position);

                Intent in = new Intent(ListItemActivity.this, ListItemDetailActivity.class);
                in.putExtra(KEY_TITLE, map.get(KEY_TITLE));
                startActivity(in);                  
            }
        });
    }
}

}


person Sonali    schedule 28.10.2013    source источник


Ответы (1)


Это нормальное поведение, потому что вы переходите от действия фрагмента к обычному действию. Но только у вашего первого действия есть вкладки.

Правильный способ сделать это — удалить намерения и новые действия. Вместо этого его следует заменить самими фрагментами.

Например, в элементе списка щелкните, прекратите вызывать Intent для действия нового фрагмента и замените его вызовом самого фрагмента.

Будет только одно действие, и оно будет удерживать вкладки, а все остальные должны быть фрагментами. Вам просто нужно заменить фрагменты внутри одного и того же действия.

person Andro Selva    schedule 28.10.2013
comment
я отметил как полезный, приму через 7 минут, да, вы правы, я попытался вызвать другой фрагмент в том же действии, но столкнулся с несколькими проблемами, вы поможете мне в этом? если у вас нет проблем, на самом деле я новичок и пытаюсь сделать это... - person Sonali; 28.10.2013
comment
с какими проблемами вы сталкиваетесь? - person Andro Selva; 28.10.2013
comment
конечно, скажу вам, пожалуйста, подождите минутку - person Sonali; 28.10.2013
comment
в этой строке: transaction.replace(R.id.fragment_container, фрагмент); получение: fragment_container не может быть разрешен или не является полем. Я уверен, что как только я решу эту проблему, мой образец будет работать нормально, как я и хотел - person Sonali; 28.10.2013