0

내 목록보기 항목이 내 전화에 표시되지 않지만 태블릿에서는 표시됩니다. 이미 제공된 마스터/세부 흐름을 수정했습니다. 그러나 목록에 항목을 추가하면 해당 항목이 전화기에 표시되지 않습니다. 왜 그런가요? 어떻게 수정합니까? 어떤 도움이라도 대단히 감사합니다. 여기 내 목록 활동이 있습니다.ListView가 태블릿에는 표시되지만 전화에는 표시되지 않습니다.

package com.example.sample; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 
import android.widget.Toast; 

import com.actionbarsherlock.app.ActionBar; 
import com.actionbarsherlock.app.ActionBar.Tab; 
import com.actionbarsherlock.app.SherlockFragmentActivity; 
import com.actionbarsherlock.view.Menu; 
import com.actionbarsherlock.view.MenuItem; 

/** 
* An activity representing a list of Courses. This activity has different 
* presentations for handset and tablet-size devices. On handsets, the activity 
* presents a list of items, which when touched, lead to a 
* {@link CourseDetailActivity} representing item details. On tablets, the 
* activity presents the list of items and item details side-by-side using two 
* vertical panes. 
* <p> 
* The activity makes heavy use of fragments. The list of items is a 
* {@link CourseListFragment} and the item details (if present) is a 
* {@link CourseDetailFragment}. 
* <p> 
* This activity also implements the required 
* {@link CourseListFragment.Callbacks} interface to listen for item selections. 
*/ 
public class CourseListActivity extends SherlockFragmentActivity implements 
    CourseListFragment.Callbacks { 

CourseListFragment listFrag; 

public static String courseName; 
private static final int REQUEST_CODE = 10; 

/** 
* Whether or not the activity is in two-pane mode, i.e. running on a tablet 
* device. 
*/ 
private boolean mTwoPane; 
private boolean once = true; 

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

    if (findViewById(R.id.course_detail_container) != null) { 
     // The detail container view will be present only in the 
     // large-screen layouts (res/values-large and 
     // res/values-sw600dp). If this view is present, then the 
     // activity should be in two-pane mode. 
     mTwoPane = true; 

     // In two-pane mode, list items should be given the 
     // 'activated' state when touched. 
     listFrag = ((CourseListFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.course_list)); 
     listFrag.setActivateOnItemClick(true); 
    } 

    // TODO: If exposing deep links into your app, handle intents here. 
} 

/** 
* Callback method from {@link CourseListFragment.Callbacks} indicating that 
* the item with the given ID was selected. 
*/ 

public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getSupportMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

public boolean onOptionsItemSelected(MenuItem item) { 
    boolean bool; 
    switch (item.getItemId()) { 
    case R.id.add_course: 
     Intent intent = new Intent(this, CourseAddActivity.class); 
     startActivityForResult(intent, REQUEST_CODE); 
     bool = true; 
    default: 
     bool = super.onOptionsItemSelected(item); 
    } 
    return bool; 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) { 
     if (data.hasExtra("courseName")) { 
      courseName = data.getExtras().getString("courseName"); 
      if (mTwoPane) { 
       if (!courseName.equals("")) { 
        listFrag.addCourse(courseName); 
       } 
      } 
     } 
    } 
} 

@Override 
public void onItemSelected(String id) { 
    if (mTwoPane) { 
     // In two-pane mode, show the detail view in this activity by 
     // adding or replacing the detail fragment using a 
     // fragment transaction. 
     if (once) { 
      ActionBar actionBar = getSupportActionBar(); 
      actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
      // initiating both tabs and set text to it. 
      ActionBar.Tab assignTab = actionBar.newTab().setText(
        "Assignments"); 
      ActionBar.Tab schedTab = actionBar.newTab().setText("Schedule"); 
      ActionBar.Tab contactTab = actionBar.newTab() 
        .setText("Contact"); 

      // Create three fragments to display content 
      Fragment assignFragment = new Assignments(); 
      Fragment schedFragment = new Schedule(); 
      Fragment contactFragment = new Contact(); 

      assignTab.setTabListener(new MyTabsListener(assignFragment)); 
      schedTab.setTabListener(new MyTabsListener(schedFragment)); 
      contactTab.setTabListener(new MyTabsListener(contactFragment)); 

      actionBar.addTab(assignTab); 
      actionBar.addTab(schedTab); 
      actionBar.addTab(contactTab); 
      once = false; 
     } 
    } else { 
     // In single-pane mode, simply start the detail activity 
     // for the selected item ID. 
     Intent detailIntent = new Intent(this, CourseDetailActivity.class); 
     startActivity(detailIntent); 
    } 

} 

class MyTabsListener implements ActionBar.TabListener { 
    public Fragment fragment; 

    public MyTabsListener(Fragment fragment) { 
     this.fragment = fragment; 
    } 

    @Override 
    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
    } 

    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     ft.replace(R.id.course_detail_container, fragment); 
    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     ft.remove(fragment); 
    } 
} 
} 

여기 내 목록이 있습니다.

package com.example.sample; 

import java.util.ArrayList; 

import android.app.Activity; 
import android.os.Build; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

import com.actionbarsherlock.app.SherlockListFragment; 

/** 
* A list fragment representing a list of Courses. This fragment also supports 
* tablet devices by allowing list items to be given an 'activated' state upon 
* selection. This helps indicate which item is currently being viewed in a 
* {@link CourseDetailFragment}. 
* <p> 
* Activities containing this fragment MUST implement the {@link Callbacks} 
* interface. 
*/ 
public class CourseListFragment extends SherlockListFragment { 

private static String courseName; 
ArrayList<String> courseItems; 
ArrayAdapter<String> adapter; 
/** 
* The serialization (saved instance state) Bundle key representing the 
* activated item position. Only used on tablets. 
*/ 
private static final String STATE_ACTIVATED_POSITION = "activated_position"; 

/** 
* The fragment's current callback object, which is notified of list item 
* clicks. 
*/ 
private Callbacks mCallbacks = sDummyCallbacks; 

/** 
* The current activated item position. Only used on tablets. 
*/ 
private int mActivatedPosition = ListView.INVALID_POSITION; 

/** 
* A callback interface that all activities containing this fragment must 
* implement. This mechanism allows activities to be notified of item 
* selections. 
*/ 
public interface Callbacks { 
    /** 
    * Callback for when an item has been selected. 
    */ 
    public void onItemSelected(String id); 
} 

/** 
* A dummy implementation of the {@link Callbacks} interface that does 
* nothing. Used only when this fragment is not attached to an activity. 
*/ 
private static Callbacks sDummyCallbacks = new Callbacks() { 
    @Override 
    public void onItemSelected(String id) { 
    } 
}; 

/** 
* Mandatory empty constructor for the fragment manager to instantiate the 
* fragment (e.g. upon screen orientation changes). 
*/ 
public CourseListFragment() { 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    courseItems = new ArrayList<String>(); 
    int layout = (Build.VERSION.SDK_INT >= 11) ? android.R.layout.simple_list_item_activated_1 
      : android.R.layout.simple_list_item_1; 
    adapter = new ArrayAdapter<String>(getActivity(), 
      layout, courseItems); 
    // TODO: replace with a real list adapter. 
    setListAdapter(adapter); 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    // Restore the previously serialized activated item position. 
    if (savedInstanceState != null 
      && savedInstanceState.containsKey(STATE_ACTIVATED_POSITION)) { 
     setActivatedPosition(savedInstanceState 
       .getInt(STATE_ACTIVATED_POSITION)); 
    } 
} 
public void addCourse(String courseName) { 
    courseItems.add(courseName); 
    adapter.notifyDataSetChanged(); 
} 
@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 

    // Activities containing this fragment must implement its callbacks. 
    if (!(activity instanceof Callbacks)) { 
     throw new IllegalStateException(
       "Activity must implement fragment's callbacks."); 
    } 

    mCallbacks = (Callbacks) activity; 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 

    // Reset the active callbacks interface to the dummy implementation. 
    mCallbacks = sDummyCallbacks; 
} 

@Override 
public void onListItemClick(ListView listView, View view, int position, 
     long id) { 
    super.onListItemClick(listView, view, position, id); 
    // Notify the active callbacks interface (the activity, if the 
    // fragment is attached to one) that an item has been selected. 
    mCallbacks.onItemSelected(null); 

} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    if (mActivatedPosition != ListView.INVALID_POSITION) { 
     // Serialize and persist the activated item position. 
     outState.putInt(STATE_ACTIVATED_POSITION, mActivatedPosition); 
    } 
} 

/** 
* Turns on activate-on-click mode. When this mode is on, list items will be 
* given the 'activated' state when touched. 
*/ 
public void setActivateOnItemClick(boolean activateOnItemClick) { 
    // When setting CHOICE_MODE_SINGLE, ListView will automatically 
    // give items the 'activated' state when touched. 
    getListView().setChoiceMode(
      activateOnItemClick ? ListView.CHOICE_MODE_SINGLE 
        : ListView.CHOICE_MODE_NONE); 
} 

public void setActivatedPosition(int position) { 
    if (position == ListView.INVALID_POSITION) { 
     getListView().setItemChecked(mActivatedPosition, false); 
    } else { 
     getListView().setItemChecked(position, true); 
    } 

    mActivatedPosition = position; 
} 
} 

감사합니다!

편집

은 여기 onActivityResult를 내 activity_course_list.xml

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/course_list" 
android:name="com.example.sample.CourseListFragment" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_marginLeft="16dp" 
android:layout_marginRight="16dp" 
tools:context=".CourseListActivity" 
tools:layout="@android:layout/list_content" /> 
+0

'mTwoPane' h 그걸로 뭔가 할 수 있습니까? –

+0

그 이유는 무엇입니까? – aindurti

+0

나는 태블릿이 휴대 전화와 다르게 취급 할 수 있다고 생각했습니다. 'activity_course_list' 레이아웃 파일을 게시 할 수 있습니까? –

답변

0

당신이 twoPane에있는 경우에만 목록에 결과를 추가하는 것 같습니다
  if (mTwoPane) { 
       if (!courseName.equals("")) { 
        listFrag.addCourse(courseName); 
       } 
      } 

모드 :

+0

감사! 나는 그것을 변경하고 두 경우 모두에서 listFrag 객체를 인스턴스화해야했습니다. 그런 다음 효과가있었습니다. – aindurti

+0

여기에 코드를 붙여 넣습니다. listFrag 객체를 인스턴스화하는 방법입니다. 그래서 도움이 필요한 사람들에게 도움이 될 수 있습니다. –

관련 문제