2014-09-07 4 views
0

두 조각을 표시하는 간단한 응용 프로그램을 만들려고합니다. 첫 번째 조각이 기본적으로 표시됩니다. 여기에는 선택할 수있는 이름 목록이 포함되어 있으며 항목 중 하나를 클릭하면 두 번째 조각을 텍스트보기로 표시하여 선택한 이름을 표시합니다.조각을 추가 할 수 없습니다 - android

문제는 내가 목록에서 이름 중 하나를 클릭 할 때마다 NullPointerException을 던집니다. 나는 정말로 그 문제가 무엇인지 모릅니다. 여기

는 코드이다 -

(앱 세 클래스 포함한다. 두 단편과 하나 개의 활동을 FriendsF 단편리스트 단편이며 잘 수행 번째 단편 FeedFragment이며가 클릭 된 이름을 표시한다 onitemclick).

FriendsF 단편 :

package com.example.fragmentsexcersize; 

import android.app.Activity; 
import android.app.ListFragment; 
import android.os.Build; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

public class FriendsF extends ListFragment { 

private static final String[] FRIENDS = { "ladygaga", "msrebeccablack", 
     "taylorswift13" }; 
public interface SelectionListener { 
    public void onItemSelected(int position); 
} 
private SelectionListener mCallback; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? android.R.layout.simple_list_item_activated_1 
      : android.R.layout.simple_list_item_1; 
    setListAdapter(new ArrayAdapter<String>(getActivity().getBaseContext(), layout, FRIENDS)); 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    try { 
     mCallback = (SelectionListener) activity; 
    } catch (ClassCastException e) { 
     throw new ClassCastException(activity.toString() 
       + " must implement SelectionListener"); 
    } 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    if (isInTwoPaneMode()) { 
     getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
    } 
} 

@Override 
public void onListItemClick(ListView l, View view, int position, long id) { 
    mCallback.onItemSelected(position); 
} 

private boolean isInTwoPaneMode() { 
    return getFragmentManager().findFragmentById(R.id.tweets) != null; 
} 
} 

FeedFragment :

package com.example.fragmentsexcersize; 

import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

public class FeedFragment extends Fragment{ 

private TextView mTextView; 
private static final String[] data = { "ladygaga", "msrebeccablack", 
"taylorswift13" }; 

public FeedFragment() { 

} 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.tweet_view, container, false); 
    mTextView = (TextView) rootView.findViewById(R.id.tweet_view); 
    return rootView; 
} 

public void updateFeedDisplay(int position) { 
    mTextView.setText(data[position]); 
} 
} 

MainActivity :

package com.example.fragmentsexcersize; 

import android.app.Activity; 
import android.app.FragmentManager; 
import android.os.Bundle; 
import android.app.FragmentTransaction; 

public class MainActivity extends Activity implements FriendsF.SelectionListener{ 

private FriendsF mFriendsFragment; 
private FeedFragment mFeedFragment; 
private FragmentManager fragMana; 
private FragmentTransaction transaction; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mFriendsFragment = new FriendsF(); 
    fragMana = getFragmentManager(); 
    transaction = fragMana.beginTransaction(); 
    transaction.add(R.id.friends, mFriendsFragment); 
    transaction.commit(); 
} 

private boolean isInTwoPaneMode() { 
    return findViewById(R.id.tweets) == null; 
} 
public void onItemSelected(int position) { 

    if (mFeedFragment == null) 
     mFeedFragment = new FeedFragment(); 
    if (!isInTwoPaneMode()) { 
     transaction = fragMana.beginTransaction(); 
     transaction.add(R.id.tweets, mFeedFragment); 
     transaction.commit(); 
    } 
    mFeedFragment.updateFeedDisplay(position); 
} 
} 
+0

스택 트레이스를 게시하시기 바랍니다. – woot

+0

http://i.gyazo.com/dd6c74b18e4b4b74a97b64bb5c060344.png –

답변

0

가 원본을 다음과 같이 변경합니다

MainActivity

public void onItemSelected(int position) { 

    Bundle bundle = new Bundle(); 
    if (mFeedFragment == null) 
     mFeedFragment = new FeedFragment(); 
    if (!isInTwoPaneMode()) { 
     bundle.putInt("POSITION", position); 
     mFeedFragment.setArguments(bundle); 

     transaction = fragMana.beginTransaction(); 
     transaction.replace(R.id.tweets, mFeedFragment); 
     transaction.commit(); 
    } 
} 

FeedFragment

private TextView mTextView; 
private static final String[] data = { "ladygaga", "msrebeccablack", 
"taylorswift13" }; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) { 
    View rootView = inflater.inflate(R.layout.tweet_view, container, false); 
    mTextView = (TextView) rootView.findViewById(R.id.tweet_view); 

    int mPosition = getArguments().getInt("POSITION", 0); 
    mTextView.setText(data[mPosition]); 
    return rootView; 
} 
관련 문제