передать данные MainActivity во фрагмент Tab - PullRequest
0 голосов
/ 23 октября 2018

Я новичок в android и java, но в моем самом первом приложении я вроде как играю в магазине, первое, что вы видите в магазине, а затем переходите ко второму занятию и видите весь этот список.Я построил горизонтальный ArrayList, и мне также удалось создать Cardview второго действия, мой ArrayList является статическим, я имею в виду, что он не использует какой-либо сервер.

Моя проблема в том, как я могу отправить MainActivity 's данные через адаптер, который находится в нем на MainActivity2.

Вот моя основная деятельность, где мои данные находятся там:

public class MainActivity extends AppCompatActivity {

private ArrayList<SectionDataModel> allSampleData;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    allSampleData = new ArrayList<>();


    RecyclerView recyclerView = findViewById(R.id.my_recycler_view1);
    recyclerView.setHasFixedSize(true);
    RecyclerViewDataAdapter adapter = new RecyclerViewDataAdapter(allSampleData, this);
    recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
    recyclerView.setAdapter(adapter);


    EssentialData();



}

public void EssentialData() {
    SectionDataModel Unit1 = new SectionDataModel();
    Unit1.setHeaderTitle("Unit 1");


    ArrayList<SingleItemModel> singleItemModels = new ArrayList<>();

    singleItemModels.add(new SingleItemModel("Word ", "Pronunciation", "Example", R.drawable.alferet));
    singleItemModels.add(new SingleItemModel("The Apple", "Apple Store Is Open", "Description book", R.drawable.alferet));
    singleItemModels.add(new SingleItemModel("The Apple", "Apple Store Is Open", "Description book", R.drawable.soft));
    singleItemModels.add(new SingleItemModel("The Apple", "Apple Store Is Open", "Description book", R.drawable.alferet));
    singleItemModels.add(new SingleItemModel("The Apple", "Apple Store Is Open", "Description book", R.drawable.alferet));
    singleItemModels.add(new SingleItemModel("The Apple", "Apple Store Is Open", "Description book", R.drawable.alferet));
    singleItemModels.add(new SingleItemModel("The Apple", "Apple Store Is Open", "Description book", R.drawable.alferet));
    singleItemModels.add(new SingleItemModel("The Apple", "Apple Store Is Open", "Description book", R.drawable.alferet));
    singleItemModels.add(new SingleItemModel("The Apple", "Apple Store Is Open", "Description book", R.drawable.alferet));
    singleItemModels.add(new SingleItemModel("The Apple", "Apple Store Is Open", "Description book", R.drawable.alferet));
    singleItemModels.add(new SingleItemModel("The Apple", "Apple Store Is Open", "Description book", R.drawable.alferet));
    singleItemModels.add(new SingleItemModel("The Apple", "Apple Store Is Open", "Description book", R.drawable.alferet));
    singleItemModels.add(new SingleItemModel("The Apple", "Apple Store Is Open", "Description book", R.drawable.alferet));


    Unit1.setAllItemInSection(singleItemModels);
    allSampleData.add(Unit1);


}
  }

И мой SectionDataAdapter, который только отэто я могу отправить данные во вторую MainActivity, потому что если я делаю это из MainActivity, он возвращается Null:

public class SectionDataAdapter extends RecyclerView.Adapter<SectionDataAdapter.SingleItemRowHolder>{

private final Context mContext;

private ArrayList<SingleItemModel> itemModels;


//the constructor
public SectionDataAdapter(ArrayList<SingleItemModel> itemModels, Context mContext) {
    this.itemModels = itemModels;
    this.mContext = mContext;
}


@NonNull
@Override
public SingleItemRowHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_single_card, null);
    SingleItemRowHolder singleItemRowHolder = new SingleItemRowHolder(view);
    return singleItemRowHolder;
}




@Override
public void onBindViewHolder(@NonNull SingleItemRowHolder holder, int position) {
    SingleItemModel itemModel = itemModels.get(position);
    holder.tvTitle.setText(itemModel.getWord());
    holder.mitemImage.setImageResource(itemModel.getImage());
}


@Override
public int getItemCount() {return (null != itemModels ? itemModels.size() : 0);}

public class SingleItemRowHolder extends RecyclerView.ViewHolder {
    protected TextView tvTitle;
    protected ImageView mitemImage;



    public SingleItemRowHolder(final View itemView) {

        super(itemView);
        //Intent to start next activity
        final Intent intent = new Intent(mContext, ActivityDialogTheme.class);
        final Intent intent1 = new Intent(mContext, MainActivity2.class);

        final Activity activity = (Activity) mContext;

        this.mitemImage = itemView.findViewById(R.id.itemImage);
        this.tvTitle = itemView.findViewById(R.id.tvTitle);


        itemView.setOnClickListener(new View.OnClickListener(){


            @Override
            public void onClick(View v){
                Toast.makeText(v.getContext(), tvTitle.getText(), LENGTH_SHORT).show();
                //passing data to Tab1Fragment

                mContext.startActivity(intent1);
            }
        });
        itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                Toast.makeText(mContext,tvTitle.getText(), Toast.LENGTH_SHORT).show();
                mContext.startActivity(intent);

                //appearing animation
                activity.overridePendingTransition(R.anim.bottom_in, R.anim.fade_in_right);
                return true;
            }
        });
        }
    }
}

MainActivity2 содержит 3 вкладки, в одной из которых мне тоже нужно получить их, потому что яобъявленный фрагмент всех вкладок и функция фрагмента каждой вкладки аналогичны адаптеру MainActivity (SectionDataAdapter), который будет отображать элементы ArrayLists.Это означает, что я должен также получить ArrayList of MainActivity во всех фрагментах.

вот мой Tab1Fragment:

public class Tab1Fragment extends Fragment {
public Tab1Fragment() {
    // Required empty public constructor
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.tab1_fragment, container, false);
    return view;
}
  }

и, конечно же, мой RecyclerViewAdapter, который показывает элементы ArrayLaists

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder0> {
private Context mContext ;
private ArrayList<SingleItemModel> mData ;


//the constructor
public RecyclerViewAdapter(Context mContext, ArrayList<SingleItemModel> mData) {
    this.mContext = mContext;
    this.mData = mData;
}



@NonNull
@Override
public MyViewHolder0 onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view;
    LayoutInflater mInflater = LayoutInflater.from(mContext);
    view = mInflater.inflate(R.layout.cardview_item_book, parent, false);
    return new MyViewHolder0(view);
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder0 holder, final int position) {
    holder.tv_book_title.setText(mData.get(position).getWord());
    holder.img_book_thumbnail.setImageResource(mData.get(position).getImage());

        holder.cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(mContext,Book_Activity.class);
                // passing data to the book activity

                //intent.putExtra("key_Word",value);
                intent.putExtra("Word",mData.get(position).getWord());
                intent.putExtra("Pronunciation",mData.get(position).getPronunciation());
                intent.putExtra("Examples&Explanation",mData.get(position).getExamples());
                //intent.putExtra("Definition",mData.get(position).getDefinition());
                intent.putExtra("WordImage",mData.get(position).getImage());
                // start the activity
                mContext.startActivity(intent);
            }
        });
    }

    @Override
    public int getItemCount() {
        return mData.size();
    }

    public static class MyViewHolder0 extends RecyclerView.ViewHolder {
        TextView tv_book_title;
        ImageView img_book_thumbnail;
        CardView cardView ;

        public MyViewHolder0(View itemView) {
            super(itemView);
            tv_book_title =  itemView.findViewById(R.id.book_title_id) ;
            img_book_thumbnail = itemView.findViewById(R.id.book_img_id);
            cardView =  itemView.findViewById(R.id.cardview_id);
        }
    }



}

кто-нибудь, помогите мне! ..

1 Ответ

0 голосов
/ 23 октября 2018

вам нужно использовать Намерение для отправки данных в другой вид деятельности

@Override
  public void onClick(View v) {

    Book book = new Book(mBkTitle.getText().toString(),
            mBkAuthor.getText().toString());

    Intent intent = new Intent(MainActivity.this, BookActivity.class);
    intent.putExtra("Book", book);
    startActivity(intent);
  }

данные должны выходить из Parcelable

public class Book implements Parcelable {
  // book basics
  private String title;
  private String author;
}

использовать http://www.jsonschema2pojo.org/, чтобы помочь вам сделать класс доступным.

Проверьте это руководство

https://code.tutsplus.com/tutorials/how-to-pass-data-between-activities-with-android-parcelable--cms-29559

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...