2017-08-29 61 views
0

我在我的應用程序中使用片段。每個片段都有一個列表視圖。 ListView是包含單個圖像視圖的自定義列表視圖。SearchView內包含ListView的片段?

<ImageView 
    android:id="@+id/imageView3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    app:srcCompat="@android:drawable/ic_notification_overlay" /> 

listview項是圖像。我想實現searchview。我想每一個列表視圖項如「鈴兒響叮噹等」的名稱,也是1,2號即」進行搜索。等。

包含列表視圖標題我的Java文件。

public class carolFrag extends Fragment { 

//code 

public carolFrag() { 
    // Required empty public constructor 
} 

public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 

} 

private static final String TAG = "carolFrag"; 

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


    final int[] menuImage = {R.drawable.carol_1_title, R.drawable.carol_2_title,R.drawable.carol_3_title,R.drawable.carol_4_title,R.drawable.carol_5_title,R.drawable.carol_6_title,R.drawable.carol_7_title,R.drawable.carol_8_title,R.drawable.carol_9_title,R.drawable.carol_10_title,R.drawable.carol_11_title}; 
    final ListView listView = (ListView) view.findViewById(R.id.CarolList); 

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 


      Intent intent1 = new Intent (getActivity(), PackageC.class) 
      intent1.putExtra("position", position); 
      startActivity(intent1); 




     } 
    }); 
    AdapterCarols adapter = new AdapterCarols(getContext(), menuImage); 
    listView.setAdapter(adapter); 

    // Inflate the layout for this fragment 



    return view; 
} 

}

我無法作出任何邏輯作爲數組可繪製在裏面。

回答

0

因爲數組是充滿可繪製的,它不是一個數據庫的東西或anithing每一個解決方案,你我會得到的將是我認爲簡單的方法是讓另一個陣列也許是 - String [] - 與drawables的名稱按照它們在原始序列中的順序相同 - final int [] menuImage - 您可以在String數組中搜索並保存結果的位置。然後使用這些位置創建一個新數組(int []),將與這些位置相匹配的drawable放在這個新數組中。最後更改列表視圖的適配器,將結果和notifydatachange()傳遞給數組。在列表視圖中進行更新。

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


final int[] menuImage = {R.drawable.carol_1_title, R.drawable.carol_2_title,R.drawable.carol_3_title,R.drawable.carol_4_title,R.drawable.carol_5_title,R.drawable.carol_6_title,R.drawable.carol_7_title,R.drawable.carol_8_title,R.drawable.carol_9_title,R.drawable.carol_10_title,R.drawable.carol_11_title}; 


final ListView listView = (ListView) view.findViewById(R.id.CarolList); 

SearchView sv = view.findviewById(R.id.searchview); 
sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() 
      { 
       public boolean onQueryTextChange(String par1) 
       { 
        return false; 
       } 

       public boolean onQueryTextSubmit(String par1) 
       { 

         int [] searchresults = PerformSearch(par1); 
         AdapterCarols newadapter = new 
           AdapterCarols(getContext(), searchresults); 
         listView.setAdapter(adapter); 
        listview.invalidate(); // don't remember listview refresh method. I work with Recyclerview, they have a notifyDatasetChange(); method. 

       } 
     }); 

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 


     Intent intent1 = new Intent (getActivity(), PackageC.class) 
     intent1.putExtra("position", position); 
     startActivity(intent1); 




    } 
}); 
AdapterCarols adapter = new AdapterCarols(getContext(), menuImage); 
listView.setAdapter(adapter); 

// Inflate the layout for this fragment 



return view; 
} 


private int[] PerformSearch(par1) 
{ 

String [] strcarols = {carol_1_title,carol_2_title,carol_3_title,carol_4_title,carol_5_title,carol_6_title,carol_7_title,carol_8_title,carol_9_title,carol_10_title,carol_11_title}; 

int[] menuImage = {R.drawable.carol_1_title, R.drawable.carol_2_title,R.drawable.carol_3_title,R.drawable.carol_4_title,R.drawable.carol_5_title,R.drawable.carol_6_title,R.drawable.carol_7_title,R.drawable.carol_8_title,R.drawable.carol_9_title,R.drawable.carol_10_title,R.drawable.carol_11_title}; 

int[] results = new int[]; 

int carolsresultcount = 0, index =0; 
    /// simplest way 
    for(String carol:strcarols) 
    { 
    if(carol.contains(par1)) 
     { 
     results [carolsresultcount++] = menuImage [index]; 
     } 
     index++; 
    } 

return results; 


} 

我希望這可以解決您的問題。

+0

你能再細說一下嗎? –

+0

它不工作。它可以用hashmaps完成嗎?我不記得hashmaps。 –

+0

它說carolFrag中的PerformSearch()不能應用。它無法解析listView.setAdapter(適配器);中的適配器。並且它無法解析listview.invalidate();中的listview。它無法解析String [] strcarols = {titles}中的標題; –