0

ユーザーにリストを提示するフラグメントがあるため、クラス内にフラグメントが2つあります.1つはホルダー用、もう1つはアダプター用です。フラグメントからクラスへのリストの受け渡し

public class ListFragment extends Fragment { 
List<>mylist; 
     //some stuff 
    public class Holder extends RecyclerView.ViewHolder implements View.OnClickListener{ 
     //some Stuff 
     } 
//Another class 
public class NoteAdapter extends RecyclerView.Adapter<NoteHolder>{ 
//I put my list inside the adapter 
    } 
} 

私がしようとしているのは、同じリストでウィジェットを作成することです。 これで、ウィジェットのListViewを表示するこのgithubを確認しました:https://github.com/commonsguy/cw-advandroid/tree/master/AppWidget/LoremWidget

今私は自分のフラグメント内のリストをクラス(LoremViewFactory)に渡したいと思います。 クラスのフラグメント内のリストにアクセスできません! クラスLoremViewFactoryからは、ホルダークラスとアダプタークラスにアクセスできますが、作成するクラスにはアクセスできません。 これまでのところ、私が試した:

  • をリストにアクセスするための方法でフラグメント内に新しいクラスを作成します(私はまだクラスのアクセスもできません)
  • 私がアクセスもできるので、クラスフラグメント内のパブリック変数を作成します。別のクラスから:いいえ、動作しませんでした。
  • 既存のクラスの内部に「getlist」メソッドを作成します。メソッドにアクセスできません。

最終的なアイデアは、ウィジェット内でフラグメントが完全に同じであることをアプリに提示することです。 HolderI内側だから、

は、バンドル内のリストを置くことを意図してそれを送信するとGETLIST機能を作成しようとしました: `パブリッククラスNoteAdapterはRecyclerView.Adapter { 公共リストmNotesを拡張。ここで

public NoteAdapter(List<Note> notes) { 
     mNotes = notes; 
    } 

    @Override 
    public NoteHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); 
     View view = layoutInflater.inflate(R.layout.list_item_note, parent, false); 

     Intent in = new Intent(getContext(), WidgetProvider.class);//Send data to 
     in.putExtra("List", (Serializable) mNotes); 

     Bundle list = new Bundle(); 
     list.putSerializable("List", (Serializable) mNotes); 

     return new NoteHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(NoteHolder holder, int position) { 
     Note note = mNotes.get(position); 
     holder.bindNote(note); 
    } 
    public int getItemCount() { 
     return mNotes.size(); 
    } 
    public List<Note> getList() { 
     return mNotes; 
    } 

私がアクセスしたいから、クラス内のコードです:

public class LoremViewsFactory implements RemoteViewsService.RemoteViewsFactory { 
    //This array was created by the author, want to create my own from the data 
    private static final String[] items={"lorem", "ipsum", "dolor", 
            "sit", "amet", "consectetuer", 
            "adipiscing", "elit", "morbi", 
            "vel", "ligula", "vitae", 
            "arcu", "aliquet", "mollis", 
            "etiam", "vel", "erat", 
            "placerat", "ante", 
            "porttitor", "sodales", 
            "pellentesque", "augue", 
            "purus"}; 
private Context ctxt=null; 
private int appWidgetId; 

List<Note> mylist; 
//What I am doing, create a new "fragment class" 
    NoteListFragment test = new NoteListFragment(); 

    NoteListFragment.NoteAdapter inner = new NoteListFragment().new 
NoteAdapter(mylist); 
//Here I am trying to access the list with : 
inner.getList(); //THIS DOES NOT WORK, I can't acces methods 
+0

どのようにクラスからリストにアクセスしようとしていますか?あなたのコードを投稿できますか? –

+0

@ Saeed-rz私はちょうどより多くのコードで質問を編集しました。あなたが問題を理解し、より良いアイデアを持っている場合。 –

+0

同じリストを提示する必要があるので、Loremクラスに送信して、同じリストを提示するウィジェットを持たせることができます。 –

答えて

0

は、私は解決策を見つけた: databseのSQLiteのを使用してください。 レコードを作成し、あなたが(RemoteViewFactory内側)ウィジェットのサービスからそれを呼び出す必要があり、それを実装したら、文字列のArrayListのです:

NoteBaseHelper db = new NoteBaseHelper(this.mContext); 
    NoteBaseHelper mDbHelper = new NoteBaseHelper(this.mContext); 

    NoteHolder nh = new NoteHolder(this.mContext); 

    myListTitle=nh.getNotes(); 
    records=new ArrayList<String>(); 

    for (Note e: myListTitle){ 
     records.add(e.getTitle().toString()); 
    } 

次にあなたが方法getViewAtであなたのビューを設定することができます:

public RemoteViews getViewAt(int position) { 

    // position will always range from 0 to getCount() - 1. 
    // Construct a RemoteViews item based on the app widget item XML file, 
    and set the 
    // text based on the position. 
    RemoteViews rv = new RemoteViews(mContext.getPackageName(), 
R.layout.widget_item); 
    // feed row 
    String data=records.get(position); 
    String title = myListTitle.get(position).getTitle(); 
    String details = myListTitle.get(position).getDetails(); 
    //Put data in the widget list 
    rv.setTextViewText(R.id.title, data); 
    rv.setTextViewText(R.id.details, details); 
関連する問題