2013-10-03 3 views
0

здесь У меня есть Fragment, я использую этот код, и все работает нормально, и что я хочу сделать, это обновить мой показанный список, если есть новый файл, могли бы вы, ребята, дать какие-либо советы или подсказки?любые советы или подсказки для обновления ArrayAdapter?

КОД:

public class HomeFragment extends Fragment { 

public static final String TITLE = "title"; 
private List<String> library = new ArrayList<String>(); 
private TextView tv; 
private ListView lv; 
private ArrayAdapter<String> adapter; 
public static Handler handHF; 
private String[] temp; 
private Object UIlock = new Object(); 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.home_fragment, container, 
      false); 
    library = getLibraryList(); 

    if (!library.isEmpty()) { 
     if (tv != null) { 
      tv.setVisibility(View.GONE); 
     } else { 
      temp = library.toArray(new String[library.size()]); 
      lv = (ListView) rootView.findViewById(R.id.library_list); 
      adapter = new ArrayAdapter<String>(rootView.getContext(), 
        android.R.layout.simple_list_item_1, temp); 
      lv.setAdapter(adapter); 
      setListener(lv); 
      tv = (TextView) rootView.findViewById(R.id.library_tv1); 
      tv.setVisibility(View.GONE); 
      tv = null; 
     } 
    } else { 
     tv = (TextView) rootView.findViewById(R.id.library_tv1); 
     tv.setText("No Manga found..."); 
    } 
    return rootView; 
} 

@SuppressLint("HandlerLeak") 
@Override 
public void onResume() { 
    /* 
    * Fragment on pause state 
    */ 
    super.onResume(); 
    handHF = new Handler(Looper.getMainLooper()) { 
     @Override 
     public void handleMessage(Message msg) { 
      if (msg.what == 0) { 
       refreshAdapter(); 
      } 
     } 
    }; 
} 

private void setListener(ListView lv) { 

    /* 
    * Sets listener on listView 
    */ 

    lv.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      Intent myIntent = new Intent(view.getContext(), 
        ChapterActivity.class); 
      myIntent.putExtra(TITLE, parent.getItemAtPosition(position) 
        .toString()); 
      startActivity(myIntent); 
     } 
    }); 

    lv.setOnItemLongClickListener(new OnItemLongClickListener() { 
     public boolean onItemLongClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      Toast.makeText(view.getContext(), 
        parent.getItemAtPosition(position).toString(), 
        Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
    }); 
} 

private final List<String> getLibraryList() { 
    /* 
    * Returns List<String> of library 
    */ 
    List<String> l = new ArrayList<String>(); 
    File dir = new File(Constants.UNDUH); 
    if (dir.exists()) { 
     File[] dirs = dir.listFiles(); 
     for (File i : dirs) { 
      l.add(i.getName()); 
     } 
     return l; 
    } else { 
     return l; 
    } 
} 

private void refreshAdapter() { 
    /* 
    * It will update library and 
    */ 
    synchronized (UIlock) { 
     getActivity().runOnUiThread(new Runnable() { 
      public void run() { 
       if (tv != null) { 
        tv.setVisibility(View.GONE); 
       } 
       library = getLibraryList(); 
       temp = library.toArray(new String[library.size()]); 
       lv = (ListView) getActivity().findViewById(
         R.id.library_list); 
       adapter = new ArrayAdapter<String>(getActivity(), 
         android.R.layout.simple_list_item_1, temp); 
       lv.setAdapter(adapter); 
      } 
     }); 
    } 
} 
} 

любые советы будут оценены, спасибо!

+0

Обновить исходные данные, которые заполнит список и вызвать 'adapter.notifyDataSetChanged()' – Raghunandan

+0

use adapter.notifyDataSetChanged() –

+0

любая идея ребята, куда я должен поместить 'adapter.notifyDataSetChanged()'? @Raghunandan – willsantoso

ответ

0

обновит список строки, которые вы передаете в ListView в вашем случае, если вы используете

private String[] temp; 

Использование notifyDataSetChanged метод, просто назвать это после того, как ваш адаптер и он автоматически добавляет несколько элементов в список если ваш темп [] увеличивается.

как этот

adapter = new ArrayAdapter<String>(getActivity(), 
      android.R.layout.simple_list_item_1, temp); 
    lv.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 

Где вы добавляете больше данных в темп [] добавить дополнительную строку

((ArrayAdapter) lv.getAdapter()).notifyDataSetChanged(); 
+0

это не сработало, мне нужно переместиться на другой фрагмент, после чего он будет обновляться, я хочу автоматически обновлять, не переходя к другому фрагменту, никакой идеи? – willsantoso

+0

Обновленная проверка ответа сейчас –

Смежные вопросы