0

Android Studio で在庫のマスター/詳細テンプレートを変更しようとしています。List<Obj>私の主な目標は、単純なを適切に表示しようとすることonCreate()です。ListActivity私の問題は、から渡されるべきDetailActivity(そしてフラグメントに渡されるべき)のエクストラが渡されないことです。

完全なコードはこちら

私が修正した RecyclerView アダプター (およびホルダー) に問題があると思われます。DummyContent クラスの在庫切れも嫌です。

また、この DummyContent クラスを削除して独自のデータ ソースを作成する方がよいのか、それとも、いわゆる実生活で既存の Dummy コンテンツ ソースを変更する方が簡単で便利なのかについて、ご意見をお待ちしております。

ここにさらに多くのコード スニペットを貼り付けたい場合は、お知らせください。ご協力いただきありがとうございます。

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

    private final List<Obj> mValues;

    public SimpleItemRecyclerViewAdapter(List<Obj> items) {
        mValues = items;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.data_list_content, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {
        holder.obj = mValues.get(position);

        holder.name.setText(holder.obj.getName());
        holder.image.setText(holder.obj.getImage());

        holder.mView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mTwoPane) {
                    Bundle arguments = new Bundle();
                    arguments.putString(Keys.KLUCZ, holder.obj.getName());  // tutaj musze przeslac Id
                    DataDetailFragment fragment = new DataDetailFragment();
                    fragment.setArguments(arguments);
                    getSupportFragmentManager().beginTransaction()
                            .replace(R.id.data_detail_container, fragment)
                            .commit();
                } else {
                    Context context = v.getContext();
                    Intent intent = new Intent(context, DataDetailActivity.class);
                    intent.putExtra(Keys.KLUCZ, holder.obj.getName());
                    Log.d("DataListActivity", "obj.getName = "+holder.obj.getName());
                    context.startActivity(intent);
                }
            }
        });
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {
        public final TextView name;
        public final TextView image;
        public final View mView;
        public Obj obj;

        public ViewHolder(View view) {
            super(view);
            mView = view;
            name = (TextView) view.findViewById(R.id.id);
            image = (TextView) view.findViewById(R.id.content);
        }

    }

そして受信アクティビティ:

if (savedInstanceState == null) {
        // Create the detail fragment and add it to the activity
        // using a fragment transaction.
        Bundle arguments = new Bundle();
        arguments.putString(Keys.KLUCZ,
                getIntent().getStringExtra(Keys.KLUCZ));
        DataDetailFragment fragment = new DataDetailFragment();
        fragment.setArguments(arguments);
        getSupportFragmentManager().beginTransaction()
                .add(R.id.data_detail_container, fragment)
                .commit();
    }
4

1 に答える 1

0

自分で見つけました: Obj オブジェクトを正しくインスタンス化していませんでした:

だった:

mItem = new Obj(Keys.KLUCZ, "some string");

次のようにする必要があります。

mItem = new Obj(getArguments().getString(Keys.KLUCZ), "Jakies nazwisko");
于 2016-09-08T12:16:15.520 に答える