3

그래서 EditText 및 ListFragment가있는 FragmentActivity가 있습니다. ListFragment에는 모든 항목을 채울 수있는 어댑터가 있습니다.조각에서 활성 어댑터 가져 오기

public class XXXListFragment extends ListFragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
... 

ArrayAdapter<Spanned> adapter = new ArrayAdapter<Spanned>(inflater.getContext(), 
     R.layout.fragment_list_item_appearance, spannedArray); 

    setListAdapter(adapter); 

    return super.onCreateView(inflater, container, savedInstanceState); 

} 
} 

EditText를 사용하여 사용자가 listitem을 필터링해야합니다.

다음과 같은 오류가 발생합니다
ListFragment.this.adapter.getFilter().filter(cs); 

:

타입 QuestsListFragment 없음 둘러싸는 인스턴스 인

public class XXX extends FragmentActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.quests_activity); 

EditText ediText = (EditText) findViewById(R.id.editext); 

ediText .addTextChangedListener(new TextWatcher() { 

    @Override 
    public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { 
     // When user changed the Text 
     ListFragment.this.adapter.getFilter().filter(cs); 
    } 

    ... 
}); 
} 

내 문제는 내가 가진 Listfragment의 컨텍스트를 얻을 수 있다는 것입니다 액세스 가능 범위 : 범위

어떻게 해결할 아이디어?


여기 전체 코드입니다. 난 그냥 ... 조각을 사용하기 시작

FragmentActivity :

public class XXX extends FragmentActivity implements ListFragmentItemClickListener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.xxx_activity); 


} 

@Override 
protected void onStart() { 
    super.onStart(); 

    EditText editText = (EditText) findViewById(R.id.edittext) 

    editText .addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { 
      // THIS DOESN'T WORK 
      XXXListFragment.this.adapter.getFilter().filter(cs); 
     } 

     @Override 
     public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { 
     } 

     @Override 
     public void afterTextChanged(Editable arg0) { 
     } 
    }); 

} 

@Override 
public void onListFragmentItemClick(int position) { 

    int orientation = getResources().getConfiguration().orientation; 

    if (orientation == Configuration.ORIENTATION_LANDSCAPE) { 

     FragmentManager fragmentManager = getSupportFragmentManager(); 

     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

     Fragment prevFrag = fragmentManager.findFragmentByTag("xxx.details"); 

     if (prevFrag != null) 
      fragmentTransaction.remove(prevFrag); 

     XXXDetailsFragment fragment = new XXXDetailsFragment(); 

     Bundle b = new Bundle(); 

     b.putInt("position", position); 

     fragment.setArguments(b); 

     fragmentTransaction.add(R.id.xxx_detail_fragment_container, fragment, 
       "xxx.details"); 

     fragmentTransaction.addToBackStack(null); 

     fragmentTransaction.commit(); 

    } else { 
     ... 
    } 
} 

... 
} 

ListFragment :

public class XXXListFragment extends ListFragment { 

    ListFragmentItemClickListener ifaceItemClickListener; 

    public interface ListFragmentItemClickListener { 

     void onListFragmentItemClick(int position); 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 

     try { 
      ifaceItemClickListener = (ListFragmentItemClickListener) activity; 
     } catch (Exception e) { 
      Toast.makeText(activity.getBaseContext(), "Exception", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     Spanned[] xxx = { Html.fromHtml(getString(R.string.xxx)), ... }; 

     ArrayAdapter<Spanned> adapter = new ArrayAdapter<Spanned>(inflater.getContext(), 
       R.layout.fragment_list_item_appearance, xxx); 

     setListAdapter(adapter); 

     return super.onCreateView(inflater, container, savedInstanceState); 
    } 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 

     ifaceItemClickListener.onListFragmentItemClick(position); 

    } 

} 

ListFragment는 FragmentActivity 레이아웃에 추가됩니다

<?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="wrap_content" 
    android:orientation="vertical" > 

... 

<EditText 
    android:id="@+id/edittext" 
    style="@style/red_edittext" 
    android:hint="@string/exittext_input_search" /> 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" > 

    <fragment 
     android:id="@+id/xxx_list_fragment" 
     android:name="com.xxx.XXXListFragment" 
     android:layout_width="350dp" 
     android:layout_height="wrap_content" /> 

    <ScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 

     <FrameLayout 
      android:id="@+id/xxx_detail_fragment_container" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" > 
     </FrameLayout> 
    </ScrollView> 
</LinearLayout> 

</LinearLayout> 
+0

'ListFragment'를 추가하는 코드는 어디에 있습니까? 'ListFragment'에 대한 참조를 보유하고 직접 호출 할 수있는'public' 메소드가 있어야합니다. – Squonk

+0

전체 코드를 입력합니다. Pls보세요. – user1337

+0

같은 문제에 직면 한 사람이 있으면 해결하십시오. 공유하십시오. – subash

답변

0

내부적으로 어댑터에 액세스하여이를 리턴하는 listfragment 클래스에서 공용 메소드 getAdapterOfList()를 작성해야합니다.

관련 문제