2013-07-06 1 views
1

ListViewListView으로 채우는 동안 이상한 문제가 발생했습니다. ListFragment에 대한 내 소스 코드는 SimpleCursorAdapter입니다.리스트 아이템을 클릭/탭하지 않으면 ListView 컨텐츠가 표시되지 않습니다.

* 인한 문제 : *를 통해 목록에서 일부 데이터를 추가 한 후 내 addEditTaskActivity (내가 삽입 아무 문제가 없음을 테스트했습니다.)이 ListView의 내용이 표시되지 않습니다. 그러나 목록 항목을 클릭/탭하면 올바른 데이터가 표시됩니다.

나는 여기서 무엇을 잘못하고 있는지 모른다.

TasksListFragment.java

public class CourseTaskListFragment extends SherlockListFragment implements 
     LoaderCallbacks<Cursor>, OnItemClickListener { 

private LoaderManager mLoaderManager; 
private ListView mListView; 
protected int dialogOkCancel; 
protected long selectedTID; 
private CursorLoader mCursorLoader; 
private AsyncQueryHandler mAsyncQueryHandler; 
private Cursor mCursor; 
private Context context; 
private long semesterID_FK; 
private SimpleCursorAdapter mSimpleTaskListAdapter; 

// --------------------------------------------------------------------- 

public CourseTaskListFragment(Context context, long currentCourseId, 
     long semesterID_FK) { 
    super(); 
    this.currentCourseId = currentCourseId; 
    this.semesterID_FK = semesterID_FK; 
    this.context = context; 
} 

// --------------------------------------------------------------------- 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Log.i(StudyManagerDataSource.LOG_TAG, 
      "TaskListFragment onCreate called!"); 
    // Enable the option menu for the Fragment 
    setHasOptionsMenu(true); 

    setRetainInstance(true); 


    mSimpleTaskListAdapter = new SimpleCursorAdapter(context, 
      android.R.layout.simple_list_item_1, null, 
      new String[] { Task.COL_NAME }, 
      new int[] { android.R.id.text1 }, 
      SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); 
    setListAdapter(mSimpleTaskListAdapter); 

    mLoaderManager = getLoaderManager(); 
    mLoaderManager.initLoader(1, null, this); 

} // end onCreate 

// --------------------------------------------------------------------- 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    return inflater 
      .inflate(R.layout.course_task_fragment, container, false); 
} 

// --------------------------------------------------------------------- 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    mListView = getListView(); 
    mListView.setLongClickable(true); 

    registerForContextMenu(mListView); 

    mListView.setOnItemClickListener(this); 
    mListView.setOnItemLongClickListener(this); 
} 

// ----------------------------------------------------------------- 

@Override 
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) { 

    mCursorLoader = new CursorLoader(getActivity(), Task.CONTENT_URI, 
      Task.allColumns, Task.COL_COURSE_ID_FK + " = ? and " 
        + Task.COL_SEMESTER_ID_FK + " = ? ", new String[] { 
        String.valueOf(currentCourseId), 
        String.valueOf(semesterID_FK) }, null); 

    return mCursorLoader; 
} 

// ----------------------------------------------------------------- 

@Override 
public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) { 
    // TODO Auto-generated method stub 
    if (mSimpleTaskListAdapter != null && cursor.moveToFirst()) { 
     mSimpleTaskListAdapter.swapCursor(cursor); 

    } else { 

    } 

} 

// ----------------------------------------------------------------- 
@Override 
public void onLoaderReset(Loader<Cursor> arg0) { 
    if (mSimpleTaskListAdapter != null) 
     mSimpleTaskListAdapter.swapCursor(null); 

    } 


} 

내 레이아웃의 소스 코드는 다음과 같습니다

* course_task_fragment.xml *는 Fragment 이미있다

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center_horizontal|center_vertical" 
    android:orientation="vertical" > 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
    </ListView> 

    <TextView 
     android:id="@android:id/empty" 
     style="@style/emptyListMessage" 
     android:text="@string/no_homework" /> 

</RelativeLayout> 
+0

* ListView의 내용이 표시되지 않습니다. * - 내용이없는 행을 보거나 내용이 전혀 없습니다. – Luksprog

+0

'onClickListener' 코드는 어디에 있나요? – Sean

+0

@Luksprog 목록 항목의 내용은 선택한 상태 일 때만 표시됩니다. 즉, 내가 그것을 탭할 때 내용이 표시됩니다 ... –

답변

2

에 대한 참조 Context (여기서 Activity이 사용됨)은 getActivity()을 호출하여 검색 할 수 있습니다. 이 메소드를 사용하여 어댑터 인스턴스를 초기화해야합니다. 당신은 당신이 한 같은 인수 생성자를 구현하지 않도록해야

: 구현에 관련

. 그 이유는 안드로이드 시스템이 나중에 (예 : 구성 변경 후 ViewPager에) 조각을 다시 만들려고 할 것이고, no arguments 생성자 (귀하의 경우에는 구현되지 않음)를 호출하여 수행 할 것입니다. . 당신은 또한 당신이 전달 된 데이터 값을 잃게됩니다

당신의 Context 전달할 수 인수로 Bundle에 전달할 수 있습니다 나머지 필요가 없습니다. 당신이 할 수 조각에서

Bundle args = new Bundle(); 
args.put("course_id", long currentCourseId); 
args.put("semester", long semesterID_FK); 
// pass this to the fragment instance instead of the constructor 
CourseTaskListFragment fragment = new CourseTaskListFragment(); // your current constructor would be removed 
fragment.setArguments(args); 

을 다음을 사용하십시오 :

getArguments().getLong("couser_id"); 
getArguments().getLong("semester"); 

값을 얻으려면.

관련 문제