2017-03-16 52 views
-2

對不起,問了重複的問題,但檢查的其他問題後,我用自己的答案他們不是在我的代碼工作,我是新到Android將數據傳遞到一個活動到分片

這裏就是我想要的類通過數據

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.ViewHolder> { 


    private int[] mdataset; 
    private String[] mplanet; 

    Context c; 
    public MainAdapter(Context context ,int[] dataset , String[] planet){ 

     this.c = context; 
     this.mplanet = planet; 
     this.mdataset = dataset; 

    } 

    @Override 
    public void onBindViewHolder(MainAdapter.ViewHolder holder, final int position) { 
     holder.image.setImageResource(mdataset[position]); 
     holder.textView.setText(mplanet[position]); 

     holder.image.setOnClickListener(new View.OnClickListener() { 
      @Override 

      public void onClick(View v) { 


     // here is my i want to pass the data position to another fragment** 


       Bundle bundle = new Bundle(); 
       bundle.putInt("position", position); 
       bottomActivity fragment = new bottomActivity(); 
       fragment.setArguments(bundle); 

      } 
     }); 
    } 

    @Override 
    public int getItemCount() { 
     return mdataset.length; 
    } 




    public class ViewHolder extends RecyclerView.ViewHolder { 

     ImageView image; 
     TextView textView; 

     public ViewHolder(View itemView) { 
      super(itemView); 

      image = (ImageView) itemView.findViewById(R.id.imageView); 
      textView = (TextView)itemView.findViewById(R.id.textView); 

     } 
    } 


    @Override 
    public MainAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 


      View v = LayoutInflater.from(parent.getContext()) 
        .inflate(R.layout.single_row, null); 

     ViewHolder vh = new ViewHolder(v); 
     return vh; 
    } 

} 

這裏是我Fragment類,我想接收數據

public class bottomActivity extends Fragment 
{ 

    TextView textView; 
    int pos; 

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

     View view = inflater.inflate(R.layout.fragment_bottom, container, false); 

     textView = (TextView)view.findViewById(R.id.title_textView); 

     textView.setText(pos+""); 
     return view; 
    } 

    @Override 
    public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 


// here is that code where the data should received 

     Bundle bundle = bottomActivity.this.getArguments(); 

     if (bundle != null) 
     { 

      pos = bundle.getInt("position", 2); 

     } 

    } 
} 
+1

你沒有添加或替換片段onclick,你只是綁定到片段 –

+0

你可以解釋更多的細節我沒有太多knowleage在那 –

+0

告訴我我該怎麼辦 –

回答

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

     View view = inflater.inflate(R.layout.fragment_bottom, container, false); 

     textView = (TextView)view.findViewById(R.id.title_textView); 
     // get data from the bundle you sent 
     int position=getArguments().getInt("position"); 

     textView.setText(position+""); 
     return view; 
    } 

在您的片段onCreatView做這樣

+0

你縮短代碼不解決我的問題 –

+0

發佈你提交片段的代碼併發布你創建片段視圖的代碼,我想我會更好地理解你的問題是什麼,實際上 – warlock

+0

你的意思是xml文件 –

0

,最好的辦法是在片段靜態newInstance方法,併發送你需要像parametars的所有數據。下一步是在片段中的onCreate方法獲取您傳遞的所有數據。

e.g

活動

YourFragment fragment = YourFragment.newInstance(10, 4); 
FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.add(id, fragment).commit(); 

片段

int data1, data2; 
public static YourFragment newInstance(int data1, int data2) { 
    YourFragment fragment = new YourFragment(); 
    Bundle args = new Bundle(); 
    args.putInt("data1", data1); 
    args.putInt("data2", data2); 
    fragment.setArguments(args); 
    return fragment; 
} 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    data1 = getArguments().getInt("data1", 0); 
    data2 = getArguments().getInt("data2", 0); 

    super.onCreate(savedInstanceState); 
} 

我認爲你需要這種情況下,創建片段之前發送數據。

乾杯:)

+0

問題是getFragmentManager是顯示錯誤,如果我使用,它無法解決它 –

+0

你嘗試getSupportFragmentManager()? –

+0

是的,但後來也沒有工作顯示相同的錯誤 –

0

在適配器類使用此在onClick方法

public void onClick(View v) { 
    Bundle bundle = new Bundle(); 
    bundle.putInt("position", position);   
    bottomActivity fragment = new bottomActivity(); 
    fragment.setArguments(bundle); 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.add(CONTENT_VIEW_ID, fragment).commit(); 
    } 

其中CONTENT_VIEW_ID是應該在您的活動類中定義

然後在bottomActivity片段類的容器onCreateView

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

     View view = inflater.inflate(R.layout.fragment_bottom, container,   false); 
     Bundle bundle = this.getArguments(); 
     if (bundle != null) 
     { 
      pos = bundle.getInt("position", 2); 
     } 
     textView = (TextView)view.findViewById(R.id.title_textView); 
     textView.setText(pos+""); 
     return view; 
    } 
+0

你的意思是我必須實現View.OnClickListener並實現onClick方法 –

+0

getFragmentManager是在錯誤標記其說「無法解決它」 –

相關問題