友人のAndroidの模倣マイクロチャネル円は、レイアウトを選択するために写真をアップロード

少し複雑タイトル、マップ上の直接的な影響、彼らはあなたのニーズを満たしていれば、あなたの時間を無駄を避けるために、上でお読みください
ここに画像を挿入説明
赤が今日やっているマーク详细面積を、私たちが生きたい、それを行います!

アイデア:

表示されたリストについて少し知っているAndroidの人々のために、我々はこの数GridLayoutManagerレイアウトが簡単に私たちは、このレイアウトの代わりに、以前のLinearLayoutManagerがGridLayoutManagerを使用し、リストのrecyclerviewレンダリング使用しているとき、彼のショーのテキストを描くことができます使用することができ
、その後に我々は最終的なリストは、画像に表示された追加したいので、継承RecyclerView.Adapter手は、我々はリライトを追加している私たちの所望の機能を達成するというクラスを記述するために我々の直接のアダプタ** getItemCount()の観点で**このメソッドは、このメソッドは数を返すので写真は、私たちはここに私たちの現在のデータに1を加えた数であるべきことはブログのこの章の小さな焦点、主にこの辺りの拡張セレクタのレイアウトを実現私たちについてアップロードの写真を考えることができます。
ここに画像を挿入説明
まあ、ADO、喜びのための直接のスタートタイムコード!

主な活動のレイアウト:

ここに画像を挿入説明
コードは以下の通りであります:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".activity.ContainSendActivity">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp">
        <ImageView
            android:layout_margin="5dp"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:src="@drawable/icon_back"/>
        <Button
            android:textColor="#ffffff"
            android:layout_margin="@dimen/dp_10"
            android:background="#009933"
            android:layout_alignParentRight="true"
            android:text="发表"
            android:clickable="false"
            android:layout_width="wrap_content"
            android:layout_height="50dp"/>
    </RelativeLayout>

    <EditText
        android:gravity="start"
        android:layout_margin="10dp"
        android:hint="记录点滴幸福。。。。"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
         android:background="@null"
         android:lines="6"
        />
<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/send_recycler"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

</LinearLayout>

表示される2つのrecyclerviewレイアウトファイル

ここでは画像が掲載されていない効果が異なるコンテンツベールの二つの絵を示すために、単純だった
send_item_final.xmlを

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/defaultimg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        app:srcCompat="@drawable/icon_add"
        android:contentDescription="TODO" />
</androidx.cardview.widget.CardView>

send_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="4dp"
    android:orientation="vertical">


    <ImageView
        android:id="@+id/imageView6"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:scaleType="centerCrop"
        android:src="@drawable/smart"
        />
</androidx.cardview.widget.CardView>

アダプタのコード

public class SendBlogAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
    private Context context;
    private List<String> data;

    private static final int ITEM_ONE=1;
    private static final int ITEM_TWO=2;
    public SendBlogAdapter(Context context,List<String> data){
        this.context = context;
        this.data = data;

    }

  
    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view;
        RecyclerView.ViewHolder holder;
        if(viewType==ITEM_TWO){
             view = LayoutInflater.from(parent.getContext()).inflate(R.layout.send_ittem_final,parent,false);
             holder = new AnoViewHolder(view);
        }else {
            view = LayoutInflater.from(parent.getContext()).inflate(R.layout.send_item,parent,false);
            holder = new ViewHolder(view);
        }
        return holder;

    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof AnoViewHolder) {
            ((AnoViewHolder) holder).img.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(context,"im specatil",Toast.LENGTH_SHORT).show();
                }
            });
        }else {
            ((ViewHolder) holder).imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(context,"im nomal",Toast.LENGTH_SHORT).show();
                }
            });
        }

    }


    @Override
    public int getItemCount() {
        return data.size()+1;
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        private ImageView imageView;
        public ViewHolder(View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.imageView6);
            
        }
    }

    public class AnoViewHolder extends RecyclerView.ViewHolder{
        private ImageView img;

        public AnoViewHolder(@NonNull View itemView) {
            super(itemView);
            img = itemView.findViewById(R.id.defaultimg);
            img.setOnClickListener(this);
        }
    }

    @Override
    public int getItemViewType(int position) {
        if(position>data.size()-1){
            return ITEM_TWO;
        }else {
            return ITEM_ONE;
        }
    }
}

BUGは説明し、自らの経験を共有します

それは同じ問題に遭遇したとき、あなたが知らないまず、上記アダプタのコードは、あなたのプログラムに編集したコピーが完全に利用可能であるが、彼らはこれを達成するとき、非常に自身の経験になると私たちは共有を行い、回避の未来対処する方法、それは小さな概要とみなすことができます。

アイデア:

我々は、我々は彼の背中に片付け前に、私は2つの変数を宣言するように、写真のレイアウトは、画像を追加することを示し、現在表示されているデータを超える時に最後のパス、裁判官にデータを渡す必要があります私たち** getItemViewType()現在位置は、我々が経由して来たデータよりも大きい場合に決意の方法は、それがディスプレイの現在位置が、我々は、画像を追加する必要がレイアウトことを示し、我々はその後に**パラメータビュータイプonCreateViewHolder()に従って実施しました単に静的なレイアウトを実現することであるここでは、達成可能な静的なレイアウト・ノートでは、比較は、我々は我々のプログラムでは、この段階に来てディスプレイに表示される画像が追加されますです。

私は、BUGの詳細会いました

我々があれば、選択した画像を決定する際に、彼はまだ、選択した画像の上に私たちのクリックに応じて追加されることをマイクロ文字の友人を使用する場合、それは絵を追加することであるならば、彼は別のロジックを実行する一方、彼は、画像詳細画面に入りますが、私の最初の1つのアイデアは、コードを見て、自動的にプログラムの崩壊の直接の結果、onBindViewHolder私たちのロジック処理を画像に応じて選択し、次に2を書いたであろう、直接インスタンス化A ViewHolder我々の2つのレイアウトのImageViewのでありviewHolder直接継承RecyclerView.ViewHolder、onCreateViewHolderでこのような判決()現在のレイアウトの変更を初期化し、私たちの定義ViewHolderに結果を返し、その後、私たちはonBindViewHolderに彼の子供を見つけることができるために()ホルダーに応じて、 2つのレイアウトは、各イベントで処理することができます

スプレッド

アダプターでの私たちのイベント処理操作は非常に便利ではありません、私は、クリックイベントを考えると、ポップアップ選択ボックスの一番下に写真を追加したいと思いますで表示されるように私たちのレイアウトで処理され、その後、クリックイベントをモデルにしたイベントインターフェイスをクリックしてください活動で書かれたトリガ
拡張後のアダプタ:

public class SendBlogAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
    private Context context;
    private List<String> data;

    private static final int ITEM_ONE=1;
    private static final int ITEM_TWO=2;
    public SendBlogAdapter(Context context,List<String> data){
        this.context = context;
        this.data = data;

    }

    private OnItemClickListener clickListener;

    public void setClickListener(OnItemClickListener clickListener) {
        this.clickListener = clickListener;
    }

    public interface OnItemClickListener {
        void onClick(View view, int position);
        void onSelected(View view,int position);
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view;
        RecyclerView.ViewHolder holder;
        if(viewType==ITEM_TWO){
             view = LayoutInflater.from(parent.getContext()).inflate(R.layout.send_ittem_final,parent,false);
             holder = new AnoViewHolder(view);
        }else {
            view = LayoutInflater.from(parent.getContext()).inflate(R.layout.send_item,parent,false);
            holder = new ViewHolder(view);
        }
        return holder;

    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
//        if (holder instanceof AnoViewHolder) {
//            ((AnoViewHolder) holder).img.setOnClickListener(new View.OnClickListener() {
//                @Override
//                public void onClick(View v) {
//                    Toast.makeText(context,"im specatil",Toast.LENGTH_SHORT).show();
//                }
//            });
//        }else {
//            ((ViewHolder) holder).imageView.setOnClickListener(new View.OnClickListener() {
//                @Override
//                public void onClick(View v) {
//                    Toast.makeText(context,"im nomal",Toast.LENGTH_SHORT).show();
//                }
//            });
//        }

    }


    @Override
    public int getItemCount() {
        return data.size()+1;
    }

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
        private ImageView imageView;
        public ViewHolder(View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.imageView6);
            imageView.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            if(clickListener!=null){
                clickListener.onSelected(itemView, getAdapterPosition());
            }
        }
    }

    public class AnoViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
        private ImageView img;

        public AnoViewHolder(@NonNull View itemView) {
            super(itemView);
            img = itemView.findViewById(R.id.defaultimg);
            img.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            if(clickListener!=null){
                clickListener.onClick(itemView, getAdapterPosition());
            }
        }
    }

    @Override
    public int getItemViewType(int position) {
        if(position>data.size()-1){
            return ITEM_TWO;
        }else {
            return ITEM_ONE;
        }
    }
}

最後は)引用された:(ここで使用されるkotlinにおける私たちの活動であります

       fun initData() {

        var array4 = arrayOf("1","2","3")
        send_recycler.layoutManager  = GridLayoutManager(this,3)
        var adapter = SendBlogAdapter(this, array4.toMutableList())
        send_recycler.adapter = adapter
        adapter.setClickListener(object :SendBlogAdapter.OnItemClickListener{
            override fun onSelected(view: View?, position: Int) {//添加图片点击的事件监听
                Toast.makeText(this@ContainSendActivity,"======",Toast.LENGTH_SHORT).show()
            }

            override fun onClick(view: View?, position: Int) {//选中已添加的图片点击的事件监听
                Toast.makeText(this@ContainSendActivity,"didia",Toast.LENGTH_SHORT).show()
            }

        })
    }

:最後のものは、私はレンダリングを行う
ここに画像を挿入説明
インターフェースは少し醜いです、カザフスタン、後で私が最適化される喜喜
オードは、ここでは、セレクタレイアウトが完了している達成するために、友人のアップロード画像のマイクロチャネル円を模倣します。
後の章では、私もそれを少しを行うには、友人のマイクロチャネル円を備えていますし、動的に追加および削除画像を、画像モードを選択し、画像の閲覧機能など,,,に記録されます
ポイントの書き込みは容易ではありません、してください多くのことを同様にサポート!
ここに画像を挿入説明

公開された49元の記事 ウォン称賛72 ビュー20000 +

おすすめ

転載: blog.csdn.net/yuhang01/article/details/105229043