2016-09-28 4 views
0

저는 어댑터를 사용하여 그리드를 채우는 활동이 있습니다. 격자의 항목을 누르면 "NavbarFragment"에서 TextView의 텍스트를 변경하려고합니다.findViewById가 Fragment에 있고 (켜기) CreateView에 없습니다.

CategoryActivity.java :

GridView grid = (GridView) findViewById(R.id.gridlayout_grid); 
grid.setAdapter(new GridAdapter(tiles)); 

CategoryActivity.xml 다음에 GridAdapter.java

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_margin="5dp" 
android:orientation="vertical" 
tools:context=".Activity.CategoryActivity"> 

<fragment android:name="app_a_tize.expressme.Fragment.NavbarFragment" 
    android:id="@+id/fragNavbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

<GridView 
    android:layout_width="wrap_content" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    android:layout_margin="5dp" 
    android:verticalSpacing="10dp" 
    android:gravity="center" 
    android:horizontalSpacing="10dp" 
    android:layout_gravity="center" 
    android:id="@+id/gridlayout_grid"/> 

<fragment android:name="app_a_tize.expressme.Fragment.ConversationbarFragment" 
    android:id="@+id/fragConversation" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 
</LinearLayout> 

OnClickListener를 : NavbarFragment.java에

view.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      TextView textView = (TextView) v.findViewById(R.id.item_name); 
      String tileName = textView.getText().toString(); 
      System.out.println("tileName" + tileName); 
      ConversationBarManager.getInstance().addWord(tileName); 
      NavbarFragment navbar = new NavbarFragment(); 
      navbar.changeConversationBarString(); 
     } 
    }); 

기능 :

public void changeConversationBarString(){ 
    TextView conversationBar = (TextView) ?????.findViewById(R.id.conversationBar); 
    conversationBar.setText(ConversationBarManager.getInstance().getConversationBarString()); 
} 

이 함수에서^프래그먼트에서 TextView 대화 막대의 텍스트를 변경하려고합니다. 하지만 TextView를 얻을 수없는 이유는 무엇이든 시도하기 때문에 NullPointer를 얻게되기 때문입니다. 왜냐하면 findViewById가 작동하지 않기 때문입니다.

findViewById에 대한 모든 질문은 onCreateView() 메소드에서 getView()를 사용할 수 있다고 말합니다.

내 질문은 : 그리드의 항목을 클릭하면 NavbarFragment 내 TextView의 텍스트 속성을 어떻게 변경할 수 있습니다.

+0

당신은 사용자 정의 리스너 (인터페이스) 또는 EventBus를 사용할 수 있습니다. –

+0

어떻게 창문에 붙어 있지 않은 것을 볼 수 있습니까? – k0sh

+1

인터페이스를 사용하여 활동 또는 조각과 통신하십시오. –

답변

1

아마도 이전에 TextView을 초기화하는 것이 좋습니다. 에서 #onCreateView()

과 같이 :

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.my_fragment, container, false); 

    mMyTextView = (TextView) view.findViewById(R.id.my_text_view); 
} 

후 공개 방법 :

public void changeConversationBarString(){ 
    mMyTextView.setText(ConversationBarManager.getInstance().getConversationBarString()); 
} 
0

가장 좋은 방법은 그냥 만들어 Butterknife Butterknife 종속성에 강력한 도구

입니다 사용할 수 있습니다 :

(10)과 코드에 u는 바인딩 : 조각에

public class MainActivity extends ActionBarActivity { 

private static final int TAB_REMOTE_POSITION = 0; 
private static final int TAB_SOCIAL_POSITION = 1; 

private RemoteFragment remoteFragment; 
private ChatFragment chatFragment; 
private BluetoothSPP bt; 
private boolean bBluetooth = true; 
private WiFiP2pService wiFiP2pService; 

@Bind(R.id.view_pager) 
ViewPager viewPager; 
@Bind(R.id.tab_layout) 
TabLayout tabLayout; 

유처럼 초기화 (한 OnCreate) :

ButterKnife.bind(this, v); 

활동

당신에게 조각을 추가하지 않았기 때문에
ButterKnife.bind(this); 
0

FragmentManager을 사용하는 레이아웃 FragmentonCreateView 메서드는 호출되지 않습니다.

조각을 첨부하는 것이 즉각적인 것이 아니므로 changeConversationBarStringonViewCreated 조각의 조각에서 호출하는 것이 좋습니다.활동에

당신이 당신의 조각을 첨부해야합니다 :

FragmentManager fm = getFragmentManager(); 
FragmentTransaction ft = fm.beginTransaction(); 
ft.add(R.id.fragment_content, new NavbarFragment()); 
ft.commit(); 

NavbarFragment에서 :

public void onViewCreated() { 
    changeConversationBarString(); 
} 

public void changeConversationBarString(){ 
    TextView conversationBar = (TextView) getView().findViewById(R.id.conversationBar); 
    conversationBar.setText(ConversationBarManager.getInstance().getConversationBarString()); 
} 
관련 문제