2016-07-21 6 views
0

ビューア内で動作するフラグメントに送信するために、アダプタが自分のアクティビティから返すデータを取得する必要があります。バンドルを使用してビューページのフラグメントとアダプタのデータを共有する方法

これは私のアダプターで、それはニュース

public class FeedAdapter extends CursorAdapter { 

/* 
Etiqueta de Depuración 
*/ 
private static final String TAG = FeedAdapter.class.getSimpleName(); 

/** 
* View holder para evitar multiples llamadas de findViewById() 
*/ 
static class ViewHolder { 
    TextView titulo; 
    TextView descripcion; 

    int tituloI; 
    int descripcionI; 
} 

public FeedAdapter(Context context, Cursor c, int flags) { 
    super(context, c, flags); 

} 

public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 

    View view = inflater.inflate(R.layout.item_layout, null, false); 

    ViewHolder vh = new ViewHolder(); 

    // Almacenar referencias 
    vh.titulo = (TextView) view.findViewById(R.id.titulo); 
    vh.descripcion = (TextView) view.findViewById(R.id.descripcion); 

    // Setear indices 
    vh.tituloI = cursor.getColumnIndex(ScriptDatabase.ColumnEntradas.TITULO); 
    vh.descripcionI = cursor.getColumnIndex(ScriptDatabase.ColumnEntradas.DESCRIPCION); 

    view.setTag(vh); 

    return view; 
} 

public void bindView(View view, Context context, Cursor cursor) { 

    final ViewHolder vh = (ViewHolder) view.getTag(); 

    // Setear el texto al titulo 
    vh.titulo.setText(cursor.getString(vh.tituloI)); 

    // Obtener acceso a la descripción y su longitud 
    int ln = cursor.getString(vh.descripcionI).length(); 
    String descripcion = cursor.getString(vh.descripcionI); 

    // Acortar descripción a 77 caracteres 
    vh.descripcion.setText(descripcion); 


} 
} 

のためのタイトルと説明していくつかのカードを膨張させると、これは私が送るよ同時にviewpagerを作成したい私の活動でのfuctionですアダプタのリターン

public class LoadData extends AsyncTask<Void, Void, Cursor> { 

     @Override 
     protected Cursor doInBackground(Void... params) { 
      // Carga inicial de registros 
      return FeedDatabase.getInstance(MainActivity.this).obtenerEntradas(); 

     } 

     @Override 
     protected void onPostExecute(Cursor cursor) { 
      super.onPostExecute(cursor); 

      // Crear el adaptador 
      adapter = new FeedAdapter(
        MainActivity.this, 
        cursor, 
        SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); 

      // Relacionar la lista con el adaptador 
      Bundle arguments = new Bundle(); 
      arguments.putString(adapter); 

      viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(), arguments); 
      viewPager.setAdapter(viewPagerAdapter); 
     } 
    } 

} 

しかし、毎回私はそれは私にエラーを返す「arguments.putString」を使用してバンドル。アダプタから受け取ったデータと、Bundleが実際にどのように動作するのか、私はどのような ".put"を使用するべきかわからないので、私は混乱しています。

お手伝いできますか? ありがとう

+0

アダプタをバンドル内にStringとして配置することはできません。 putStringメソッドは、バンドルにストリングを追加するためのメソッドです。あなたは正確に何を送ろうとしていますか?オブジェクトか単純な文字列ですか? –

+0

FeedAdapterがフラグメントに返すカードビューを送信したいと思います。それはオブジェクトを返しますか? – mhkore

+0

ビューを渡すべきではありません。それは悪い習慣です。おそらくカーソルで表されるデータをViewPagerに渡すことができます。どのようなデータがカーソルによって表されますか? –

答えて

0

アクティビティに送信し、getIntent()。getStringExtra( "Name")をフラグメントに使用します。

0

ソリューション:

は、まずアダプタがある作品Serializableを

public class FeedAdapter extends CursorAdapter implements Serializable{ 

バンドルを実装しなければなりません

Bundle arguments = new Bundle(); 
arguments.putSerializable("datos",adapter); 

そして、私はこの

viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(), arguments); 
viewPager.setAdapter(viewPagerAdapter); 
ように私のviewpagerにそれを送ります

私viewPagerは次のようにデータを取り、この

public class ViewPagerAdapter extends FragmentStatePagerAdapter { 
private Bundle data; 

public ViewPagerAdapter(FragmentManager fm, Bundle data) { 
    super(fm); 
    this.data = data; 
} 

@Override 
public Fragment getItem(int position) { 

    TabFragment tab1 = new TabFragment(); 
    tab1.setArguments(data); 

    return tab1; // Which Fragment should be displayed by the viewpager for the given position 
    // In my case we are showing up only one fragment in all the three tabs so we are 
    // not worrying about the position and just returning the TabFragment 
} 

@Override 
public int getCount() { 
    return 3;   // As there are only 3 Tabs 
} 

}

そして最後に、私のフラグメントは、引数を取得し、この

public class TabFragment extends ListFragment { 

private Bundle bundle; 
private FeedAdapter adapter; 


@Override 
public void onCreate (Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    bundle = getArguments(); 
    adapter = (FeedAdapter) bundle.getSerializable("datos"); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 
    View root = inflater.inflate(R.layout.tabs, container, false); 

    ListView LV = (ListView) root.findViewById(R.id.lista); 
    LV.setAdapter(adapter); 
    return root; 
} 

}

おかげのようなアダプタを実装します!

関連する問題