অ্যান্ড্রয়েডে অনুভূমিক তালিকাভিউ?


215

ListViewঅনুভূমিকভাবে তৈরি করা কি সম্ভব ? আমি গ্যালারী ভিউ ব্যবহার করে এটি করেছি, তবে নির্বাচিত আইটেমটি স্বয়ংক্রিয়ভাবে পর্দার কেন্দ্রে আসে। আমি ক্লিক করা একই স্থানে নির্বাচিত আইটেমটি চাই না। আমি কীভাবে এই সমস্যাটিকে সংশোধন করতে পারি? আমার ধারণাটি ছিল ListViewএকটি অনুভূমিক স্ক্রোল সহ সেট করা । আপনার ধারণা ভাগ?


1
অনুভূমিক তালিকা তৈরি করতে আমার পোস্টের এই লিঙ্কটি ব্যবহার করুন দেখুন আশা করি এটি আপনাকে সহায়তা করবে।
ফাইজ আনোয়ার

2
@ ইন্দ্রা যে আপনার উল্লিখিত ব্লগটি সরানো হয়েছে
অনিমেষ মঙ্গলা ২

আপনি এই উদাহরণটি পরীক্ষা করতে পারেন thedeleterverldisyours.com/android/…
ক্যাবেজাস

উত্তর:


123

অ্যান্ড্রয়েড ডকুমেন্টেশন অনুসারে RecyclerViewতালিকার আইটেমগুলিতে আইটেমগুলি সংগঠিত করার এবং অনুভূমিকভাবে প্রদর্শিত হওয়ার নতুন উপায়

সুবিধাদি:

  1. যেহেতু পুনর্ব্যবহারযোগ্য অ্যাডাপ্টার ব্যবহার করে, ভিউহোল্ডার প্যাটার্নটি স্বয়ংক্রিয়ভাবে প্রয়োগ করা হবে
  2. অ্যানিমেশন সম্পাদন করা সহজ
  3. আরও অনেক বৈশিষ্ট্য

সম্পর্কে আরও তথ্য RecyclerView:

  1. grokkingandroid.com
  2. antonioleiva.com

নমুনা:

survivingwithandroid.com

ListViewউল্লম্ব থেকে অনুভূমিকটি তৈরি করতে কেবল নীচের ব্লকটি যুক্ত করুন

টুকিটাকি সংকেতলিপি

LinearLayoutManager layoutManager= new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL, false);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(layoutManager);

1
গুগল দ্বারা লেআউটম্যানেজারের সমস্যাগুলি স্থির করা হলে এটি সেরা সমাধান হবে। কোড.google.com/p/android/issues/detail?id=74772
পোনসুয়াম্বু ভেল্লাদুরাই

একটি সাধারণ পুনর্ব্যবহারযোগ্য ভিউ তৈরি করতে, এই উদাহরণটি ব্যবহার করুন: android-example.com/…
ম্যাটকয়েল

1
ঠিক আছে, উইজেটগুলির জন্য কী উপায়?
ভ্লাদিস্লাভ

লিস্টভিউ বা গ্রিডভিউয়ের মতো অন্যান্য অ্যাডাপ্টার-ব্যাকড ভিউগুলির বিপরীতে, রিসাইক্লারভিউ ক্লায়েন্ট কোডকে শিশু দর্শনগুলির জন্য কাস্টম বিন্যাসের ব্যবস্থা সরবরাহ করতে দেয়। এই ব্যবস্থাগুলি রিসাইক্লারভিউ.লয়আউট ম্যানেজার দ্বারা নিয়ন্ত্রিত হয়। কাজ করতে পুনর্ব্যবহারযোগ্য ভিউয়ের জন্য অবশ্যই একটি লেআউটম্যানেজার সরবরাহ করতে হবে।
যোহানেস এআই

রিসাইক্লারভিউ এখনও আইটেমগুলিতে ক্লিকগুলি পরিচালনা করতে পারে না (তালিকার দৃশ্যের তুলনায় রিসাইক্লারভিউ.স্লেশন শ্রেণীর উল্লেখ নেই) - এই কয়েকটি কারণেই আমার মনে হয় যে এই প্রশ্নটির জন্য রিসাইক্লার ভিউ সেরা উত্তর নয়।
এডওয়ার্ড কুইসোট

60

পল তার লাইব্রেরির বাগগুলি সংশোধন করতে বা ব্যবহারকারীর সংশোধনগুলি গ্রহণ করতে বিরত হন না। সে কারণেই আমি অন্য একটি লাইব্রেরির পরামর্শ দিচ্ছি যা একই রকম কার্যকারিতা রয়েছে:

https://github.com/sephiroth74/HorizontalVariableListView

আপডেট : জুলাই 24, 2013-এ লেখক (সেফিরোথ 74) অ্যান্ড্রয়েড 4.2.2 লিস্টভিউয়ের উপর ভিত্তি করে সম্পূর্ণরূপে পুনর্নির্মাণ সংস্করণ প্রকাশ করেছেন। আমার অবশ্যই বলতে হবে যে এতে পূর্ববর্তী সংস্করণটি ছিল এবং দুর্দান্ত কাজ করে এমন সমস্ত ত্রুটি নেই!


2
এটি একটি স্বীকৃত উত্তর হওয়া উচিত, 'কারণ এই হরাইজন্টাল ভ্যারিয়েবললিস্টভিউ পলের চেয়ে অনেক বেশি উন্নত। উদাহরণস্বরূপ, তালিকায় অবস্থান নির্বাচন করার জন্য এটির উপযুক্ত পদ্ধতি রয়েছে, পলের একটির জায়গায় "TODO: কোনও দিন প্রয়োগ করুন" রয়েছে।
ইয়ান.ইউর্কিন

5
নোট করুন এই সমাধানটির জন্য অ্যান্ড্রয়েড 2.3 বা তার বেশি প্রয়োজন
ব্যবহারকারী 1032613

1
sephiroth74 এর HorizontalVariableListView ঠিক কি আপনি এটা হতে আশা করি: একটি সঙ্গে Android সোর্স কোড থেকে ListView এর অনুলিপি সব পদ্ধতি অনুভূমিকভাবে বরং উল্লম্বভাবে সরাতে আপডেট করুন। আমি এখনও কোন সমস্যা চালানো হয়নি। সেখানে আমাকে পরিচালিত করার জন্য আপনাকে অনেক ধন্যবাদ, মালাচিয়াজ!
সিলিথক্রো


1
এটি এখনই বাতিল করা হয়েছে
অনিমেষ মঙ্গলা

28

@ পল একটি দুর্দান্ত সমাধানের লিঙ্কগুলির জবাব দেয়, তবে কোডটি আইটেম শিশুদের উপর অন ক্লিকলিস্টনার ব্যবহার করার অনুমতি দেয় না (কলব্যাক ফাংশনগুলি কখনই ডাকা হয় না)। সমাধান খুঁজতে আমি কিছুক্ষণ সংগ্রাম করে যাচ্ছি এবং এই কোডটিতে আপনার কী কী পরিবর্তন করতে হবে তা এখানে পোস্ট করার সিদ্ধান্ত নিয়েছি (যদি কারওর প্রয়োজন হয়)।

ওভাররাইডের পরিবর্তে dispatchTouchEventওভাররাইড onTouchEvent। একই কোডটি ব্যবহার করুন dispatchTouchEventএবং পদ্ধতিটি মুছুন (আপনি এখানে উভয়ের মধ্যে পার্থক্যটি পড়তে পারেন http://developer.android.com/guide/topics/ui/ui-events.html#EventHandlers )

@Override
public boolean onTouchEvent(MotionEvent event) {
    boolean handled = mGesture.onTouchEvent(event);
    return handled;
}

তারপরে, নীচের কোডটি যুক্ত করুন যা আইটেম বাচ্চাদের কাছ থেকে ইভেন্টটি চুরি করার সিদ্ধান্ত নেবে এবং এটি আমাদের দেবে onTouchEvent, বা এটি তাদের দ্বারা পরিচালিত হবে।

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    switch( ev.getActionMasked() ){
        case MotionEvent.ACTION_DOWN:
             mInitialX = ev.getX();
             mInitialY = ev.getY();             
             return false;
        case MotionEvent.ACTION_MOVE:
             float deltaX = Math.abs(ev.getX() - mInitialX);
             float deltaY = Math.abs(ev.getY() - mInitialY);
             return ( deltaX > 5 || deltaY > 5 );
        default:
             return super.onInterceptTouchEvent(ev);
    }
}

অবশেষে, আপনার শ্রেণিতে ভেরিয়েবলগুলি ঘোষণা করতে ভুলবেন না:

private float mInitialX;
private float mInitialY;

13
কেন আপনি এটি পৌলের কাছে টানার অনুরোধ হিসাবে প্রেরণ করবেন না?
ক্রিশ্চিয়ান

ev.getActionMasked () অ্যান্ড্রয়েড 2.1 প্ল্যাটফর্মে উপলব্ধ নয়। আপনি কীভাবে এটিকে কাটিয়ে উঠতে জানেন?
ইউজিন পপোভিচ

দেখে মনে হচ্ছে যে আমি IN maskedAction = ev.getAction () & MotionEvent.ACTION_MASK ব্যবহার করতে পারি যা ev.getMaskedAction () এর সমান হতে পারে
ইউজিন পপোভিচ

সত্যিই দরকারী! তবে কোডটি টুচ এভেন্টে রূপান্তরিত করে আমি একটি জঘন্য অফসেট পেয়েছি। আমি এটিকে ডিসপ্যাচ টাচ এভেন্টে রেখেছি এবং এটি পুরোপুরি কাজ করে! ধন্যবাদ
জেবিসি 25

jbc25 আমি নিশ্চিত করতে পারি যে এই ফিক্সটি ব্যবহার করতে গেলে অদ্ভুত জাম্পগুলি ঘটে
ইউজিন পপোভিচ

23

যেহেতু গুগল অ্যান্ড্রয়েড সাপোর্ট লাইব্রেরি v7 21.0.0 প্রবর্তন করেছে, আপনি আইটেমগুলি অনুভূমিকভাবে স্ক্রোল করতে রিসাইক্লারভিউ ব্যবহার করতে পারেন। রিসাইক্লারভিউ উইজেটটি তালিকাভিউর একটি আরও উন্নত এবং নমনীয় সংস্করণ।

রিসাইক্লারভিউ ব্যবহার করতে, কেবল নির্ভরতা যুক্ত করুন:

com.android.support:recyclerview-v7:23.0.1

এখানে একটি নমুনা দেওয়া হল:

public class MyActivity extends Activity {

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

        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        recyclerView.setLayoutManager(layoutManager);

        MyAdapter adapter = new MyAdapter(myDataset);
        recyclerView.setAdapter(adapter);
    }
}

রিসাইক্লার ভিউ সম্পর্কে আরও তথ্য:


21

এটি সামান্য (খুব) দেরি হয়ে গেছে, তবে পরে কেউ যদি আসে তবে আমি এটি পোস্ট করছি।

অ্যান্ড্রয়েড এল পূর্বরূপ হিসাবে সমর্থন লাইব্রেরিতে একটি RecyclerViewযা আপনি চান ঠিক তা করে।

এই মুহুর্তে, আপনি এটি কেবলমাত্র এল প্রিভিউ এসডিকে মাধ্যমে পেতে পারেন এবং আপনাকে এটি সেট করতে minSdkহবে L। তবে আপনি প্রয়োজনীয় সমস্ত ফাইল আপনার প্রকল্পে অনুলিপি করতে পারেন এবং এলটি সরকারীভাবে বাইরে না আসা পর্যন্ত সেগুলি সেগুলি ব্যবহার করতে পারেন।

আপনি এখানে প্রাকদর্শন ডক্স ডাউনলোড করতে পারেন ।

সতর্কতা: রিসাইকার ভিউয়ের জন্য এপিআই পরিবর্তন হতে পারে এবং এতে বাগ থাকতে পারে।

আপডেট করা হয়েছে

অনুভূমিক তালিকা দেখার জন্য উত্স কোডটি হ'ল:

LinearLayoutManager layoutManager
    = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);

RecyclerView myList = findViewById(R.id.my_recycler_view);
myList.setLayoutManager(layoutManager);

হাই, এটা কি কাজ করে? কারণ আমি চেষ্টা করেছি এবং আমি একটি অনুভূমিক পুনর্ব্যবহারযোগ্য ভিউ করতে পারি না। আপনি কিছু কোড রাখতে পারেন? ধন্যবাদ
কোকোরিকো

সবেমাত্রLinearLayoutManager এখানে সেট করুন: দেখুন এখানে: stackoverflow.com/questions/28460300/…
স্টাফেন

19

এখান থেকে জার ফাইলটি ডাউনলোড করুন

এখন এটি আপনার লিবস ফোল্ডারে রাখুন, ডানদিকে ক্লিক করুন এবং 'লাইব্রেরি হিসাবে যুক্ত করুন' নির্বাচন করুন

এখন main.xml এ এই কোডটি রাখুন

 <com.devsmart.android.ui.HorizontalListView
    android:id="@+id/hlistview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />

এখন ক্রিয়াকলাপ শ্রেণিতে যদি আপনি চিত্রগুলির সাথে অনুভূমিক তালিকা প্রদর্শন করতে চান তবে এই কোডটি রাখুন

  HorizontalListView hListView = (HorizontalListView) findViewById(R.id.hlistview);
    hListView.setAdapter(new HAdapter(this));


 private class HAdapter extends BaseAdapter {

    LayoutInflater inflater;

    public HAdapter(Context context) {
        inflater = LayoutInflater.from(context);

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return Const.template.length;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        HViewHolder holder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.listinflate, null);
            holder = new HViewHolder();
            convertView.setTag(holder);

        } else {
            holder = (HViewHolder) convertView.getTag();
        }
        holder.img = (ImageView) convertView.findViewById(R.id.image);
        holder.img.setImageResource(Const.template[position]);
        return convertView;
    }

}

class HViewHolder {
    ImageView img;
}

এটি কোনও নির্বাচক, বা কোনও কাস্টম নির্বাচককে সমর্থন করছে না? কোন ধারণা?
নিতিন মিশরা

আমি কি চিত্রগুলির পরিবর্তে সংখ্যার অ্যারে যুক্ত করতে পারি?
সৌরভলাহোটি

@ বিজনস্রভ হ্যাঁ আপনি পারবেন
সিদ্ধপুরা অমিত

এটিকে libs ফোল্ডারে রাখার পরে, এটিতে রাইট ক্লিক করুন এবং 'লাইব্রেরি হিসাবে যুক্ত করুন' টিপুন
এম উসমান খান

ডাল, বিবিসিএনউজের মতো দিগন্তের তালিকাগুলির তালিকা বিকাশকারী কীভাবে আমাকে সহায়তা করুন
হর্শা

13

এটি আসলে খুব সহজ : কেবলমাত্র তালিকাটির পাশের দিকে রাখার জন্য ঘোরান

mlistView.setRotation(-90);

তারপরে বাচ্চাদের স্ফীত করার পরে, এটি getView পদ্ধতির মধ্যে থাকা উচিত। আপনি সোজা হয়ে দাঁড়াতে বাচ্চাদের ঘোরান:

 mylistViewchild.setRotation(90);

সম্পাদনা করুন: যদি আপনার তালিকাভিউটি ঘোরার পরে ঠিক মতো ফিট না করে তবে তালিকাটি ভিউকে এই ঘোরার আড়ালে রাখুন :

 <com.github.rongi.rotate_layout.layout.RotateLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:angle="90"> <!-- Specify rotate angle here -->

    <ListView
       android:layout_width="match_parent"
       android:layout_height="match_parent">
    </ListView>
</com.github.rongi.rotate_layout.layout.RotateLayout>

1
আমি চেষ্টা করেছি - এত সহজ নয়। আমি স্ক্রিনের প্রস্থ এবং উচ্চতার সাথে ঘোরানো ভিউ ফিট করতে পারি না। এবং এই এপিআইটি কেবলমাত্র নতুন ডিভাইসে উপলব্ধ।
মালাচিয়াজ

ঘোরার আগে, তালিকাটি পর্দার উচ্চতার সাথে প্রস্থকে সেট করুন এবং তালিকাগুলির উচ্চতা পর্দার প্রস্থে সেট করুন .. (এটি যদি আপনি তালিকার পর্দাটি পূরণ করতে চান তবে) অন্যটি তালিকাটি ঘোরার আগে আপনি যে উচ্চতা এবং প্রস্থ চান সেটি সেট করুন ।
কেসি ওচিবিলি

1
আপনি যা বলছেন তা চেষ্টা করছেন? আমার আছে এবং এর কোনওটিই কাজ করে না।
মালাচিয়াজ

আপনি ঘোরার পরে মানগুলি পরিবর্তন করার চেষ্টা করেছিলেন? কেন কাজ করা উচিত তা আমি দেখছি না। (আপনি যদি ভাবছেন যে কীভাবে
ঘোরার

এই লাইব্রেরি (নতুন সংস্করণ stackoverflow.com/a/16589629/2075875 ) হিসাবে এটি করা উচিত পেশা আছে এবং অ্যান্ড্রয়েড 2.3 থেকে কাজ করার সময় setRotation () 3.0 থেকে পাওয়া যায় তাই আমি আবার ঘোরান সাথে খেলতে চাই না, কিন্তু আমি উত্সাহিত আপনি নিজে চেষ্টা করে দেখুন এবং ওয়ার্কিং কোড উপস্থাপন করুন।
মালাচিয়াজ

9

আমার সমাধানটি কেবল ViewPagerউইজেট ব্যবহার করা । এটি কেন্দ্র-লক নয় Galleryএবং পুনর্ব্যবহারযোগ্য দর্শনগুলি (যেমন ListView) এর জন্য অন্তর্নির্মিত বৈশিষ্ট্যগুলি রয়েছে । আপনি যখনই অনুভূমিকভাবে স্ক্রোলযোগ্য তালিকাগুলি লেনদেন করেন তখন গুগল প্লে অ্যাপ্লিকেশনটিতে আপনি অনুরূপ পন্থা দেখতে পাবেন।

আপনাকে কেবল PagerAdapterসেখানে কয়েকটা টুইট প্রসারিত এবং সম্পাদন করতে হবে:

public class MyPagerAdapter extends PagerAdapter {

    private Context mContext;

    public MyPagerAdapter(Context context) {
        this.mContext = context;
    }

    // As per docs, you may use views as key objects directly 
    // if they aren't too complex
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        LayoutInflater inflater = LayoutInflater.from(mContext);
        View view = inflater.inflate(R.layout.item, null);
        container.addView(view);
        return view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }

    @Override
    public int getCount() {
        return 10;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    // Important: page takes all available width by default,
    // so let's override this method to fit 5 pages within single screen
    @Override
    public float getPageWidth(int position) {
        return 0.2f;
    }
}

ফলস্বরূপ, আপনার সাথে অ্যাডাপ্টারের সাথে অনুভূমিকভাবে স্ক্রোলযোগ্য উইজেট থাকবে: এখানে চিত্র বর্ণনা লিখুন


3
এটি লিস্টভিউয়ের মতো স্ক্রোলযোগ্য, তবে অনুভূমিক দিকে। কেবলমাত্র তফাতটি আমি দেখছি: আইটেমগুলি একে একে স্ক্রোল করছে, সুতরাং পরবর্তী আইটেমটির মাঝখানে কোনও জায়গায় স্ক্রোল করা সম্ভব নয়। তবে ভিউপ্যাজার এইভাবে কাজ করে।
ভঙ্গুজকি

8

দ্রষ্টব্য: অ্যান্ড্রয়েড এখন রিসাইক্লারভিউ ব্যবহার করে অনুভূমিক তালিকার মতামতগুলিকে সমর্থন করে, তাই এখন এই উত্তরটি রিসাইক্লারভিউ সম্পর্কিত তথ্যের জন্য প্রত্যাশিত: https://developer.android.com/references/android/support/v7/widget/RecyclerView

আমি কোনও বাহ্যিক অনুভূমিক স্ক্রোলভিউ লাইব্রেরি ব্যবহার না করে এটি করার জন্য একটি যুক্তি বিকাশ করেছি, এখানে আমি যে অনুভূমিক দৃষ্টিভঙ্গি অর্জন করেছি এবং আমি আমার উত্তর এখানে পোস্ট করেছি: https://stackoverflow.com/a/33301582/5479863

আমার জসন প্রতিক্রিয়াটি হ'ল:

{"searchInfo":{"status":"1","message":"Success","clist":[{"id":"1de57434-795e-49ac-0ca3-5614dacecbd4","name":"Theater","image_url":"http://52.25.198.71/miisecretory/category_images/movie.png"},{"id":"62fe1c92-2192-2ebb-7e92-5614dacad69b","name":"CNG","image_url":"http://52.25.198.71/miisecretory/category_images/cng.png"},{"id":"8060094c-df4f-5290-7983-5614dad31677","name":"Wine-shop","image_url":"http://52.25.198.71/miisecretory/category_images/beer.png"},{"id":"888a90c4-a6b0-c2e2-6b3c-561788e973f6","name":"Chemist","image_url":"http://52.25.198.71/miisecretory/category_images/chemist.png"},{"id":"a39b4ec1-943f-b800-a671-561789a57871","name":"Food","image_url":"http://52.25.198.71/miisecretory/category_images/food.png"},{"id":"c644cc53-2fce-8cbe-0715-5614da9c765f","name":"College","image_url":"http://52.25.198.71/miisecretory/category_images/college.png"},{"id":"c71e8757-072b-1bf4-5b25-5614d980ef15","name":"Hospital","image_url":"http://52.25.198.71/miisecretory/category_images/hospital.png"},{"id":"db835491-d1d2-5467-a1a1-5614d9963c94","name":"Petrol-Pumps","image_url":"http://52.25.198.71/miisecretory/category_images/petrol.png"},{"id":"f13100ca-4052-c0f4-863a-5614d9631afb","name":"ATM","image_url":"http://52.25.198.71/miisecretory/category_images/atm.png"}]}}

লেআউট ফাইল:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="5">    
    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="4" />
    <HorizontalScrollView
        android:id="@+id/horizontalScroll"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <LinearLayout
            android:id="@+id/ll"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:orientation="horizontal">    
        </LinearLayout>
    </HorizontalScrollView>
</LinearLayout>

ক্লাস ফাইল:

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.ll);
        for (int v = 0; v < collectionInfo.size(); v++) {
            /*---------------Creating frame layout----------------------*/

            FrameLayout frameLayout = new FrameLayout(ActivityMap.this);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, getPixelsToDP(90));
            layoutParams.rightMargin = getPixelsToDP(10);
            frameLayout.setLayoutParams(layoutParams);

            /*--------------end of frame layout----------------------------*/

            /*---------------Creating image view----------------------*/
            final ImageView imgView = new ImageView(ActivityMap.this); //create imageview dynamically
            LinearLayout.LayoutParams lpImage = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            imgView.setImageBitmap(collectionInfo.get(v).getCatImage());
            imgView.setLayoutParams(lpImage);
            // setting ID to retrieve at later time (same as its position)
            imgView.setId(v);
            imgView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    // getting id which is same as its position
                    Log.i(TAG, "Clicked on " + collectionInfo.get(v.getId()).getCatName());
                    // getting selected category's data list
                    new GetSelectedCategoryData().execute(collectionInfo.get(v.getId()).getCatID());
                }
            });
            /*--------------end of image view----------------------------*/

            /*---------------Creating Text view----------------------*/
            TextView textView = new TextView(ActivityMap.this);//create textview dynamically
            textView.setText(collectionInfo.get(v).getCatName());
            FrameLayout.LayoutParams lpText = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM | Gravity.CENTER);
            // Note: LinearLayout.LayoutParams 's gravity was not working so I putted Framelayout as 3 paramater is gravity itself
            textView.setTextColor(Color.parseColor("#43A047"));
            textView.setLayoutParams(lpText);
            /*--------------end of Text view----------------------------*/

            //Adding views at appropriate places
            frameLayout.addView(imgView);
            frameLayout.addView(textView);
            linearLayout.addView(frameLayout);

        }

 private int getPixelsToDP(int dp) {
        float scale = getResources().getDisplayMetrics().density;
        int pixels = (int) (dp * scale + 0.5f);
        return pixels;
    }

কৌতুকটি যা এখানে কাজ করছে তা হ'ল আমি আইডি যা আমি চিত্র ভিউতে "imgView.setId (v)" অর্পণ করেছি এবং এর পরে ক্লিকলিস্টার প্রয়োগ করার পরে আমি আবার ভিডির আইডি আনছি .... আমি কোডের ভিতরেও মন্তব্য করেছি তাই এটি বুঝতে সহজ যে, আমি আশা করি এটি খুব কার্যকর হতে পারে ... শুভ কোডিং ... :)

http://i.stack.imgur.com/lXrpG.png


1
আমি সম্পূর্ণ ব্যাখ্যা এখানে সম্পাদনা করেছি এবং পোস্ট করেছি, পরামর্শের জন্য ধন্যবাদ :)
আবদুল আজিজ

হ্যালো আপনার কোডের জন্য ধন্যবাদ আপনি পদ্ধতিটি পোস্ট করতে পারেন getPixelsToDP()?
Skizo-ozᴉʞS

@ স্কিজো আমি জাভা কোডের শেষে এই পদ্ধতিটি যুক্ত করেছি, একবার দেখুন
আবদুল আজিজ

6

এটি কোনও উত্তরের মতো নয়, তবে একটি অনুভূমিক স্ক্রোল ভিউ কীভাবে ব্যবহার করবেন ?


3
এটি কাজ করে। তবে আমার কাছে যদি প্রচুর আইটেম থাকে তবে অ্যাডাপ্টার ধরণের স্টাফ এবং ইভেন্টগুলিতে ক্লিক করতে পারি না।
প্রবীণ

এই চেষ্টা করুন indrapatel.blogspot.in/2013/10/…
ইন্দ্র

5

আপনি সমর্থন লাইব্রেরিতে রিসাইক্লারভিউ ব্যবহার করতে পারেন। রিসাইক্লার ভিউ তালিকাভুক্তের একটি সাধারণ সংস্করণ যা সমর্থন করে:

  • আইটেম অবস্থানের জন্য একটি বিন্যাস পরিচালক
  • সাধারণ আইটেম ক্রিয়াকলাপের জন্য ডিফল্ট অ্যানিমেশন

অ্যান্ড্রয়েড পুনর্ব্যবহারযোগ্য দস্তাবেজগুলি


এই শেষ তারিখ হিসাবে এটিই আসল উত্তর। তবে এটি এখনও প্রস্তুত নয় এবং এখনও 'পূর্বরূপে' রয়েছে
মার্টিন

3

আমি এই সমস্যার সমাধানের জন্য অনেক অনুসন্ধান করেছি। সংক্ষিপ্ত উত্তরটি হ'ল, ব্যক্তিগত পদ্ধতিগুলি এবং এই ধরণের জিনিসটিকে অগ্রাহ্য করা ছাড়া কোনও ভাল সমাধান নেই। আমি যে জিনিসটি পেয়েছি তা হ'ল এটি প্রসারিত করে নিজেকে স্ক্র্যাচ থেকে বাস্তবায়ন করা AdapterView। এটা বেশ কৃপণ। অনুভূমিক তালিকাগুলি সম্পর্কে আমার SO প্রশ্নটি দেখুন ।


দুঃখজনকভাবে আপনার উত্তরটি সঠিক। এমনকি গুগল নিশ্চিত করেছে যে অনুভূমিক তালিকা দেখার জন্য একমাত্র উপায় গ্যালারী। কিন্তু গ্যালারী অনুভূমিক তালিকা-দর্শন হিসাবে এক নয়। আপনি কি আপনার কোডটি ভাগ করতে রাজি হবেন? আপনি কি ভিউগুলি পুনর্ব্যবহার করছেন?
প্যাট্রিক বুস

1
দুর্ভাগ্যক্রমে কোডটি আমার সংস্থার জন্য লেখা হয়েছিল সুতরাং মালিকানাধীন। তবে, আমি এটি পুনরায় লেখার জন্য আসন্ন মাসগুলিতে কিছু মূল সময় খুঁজে পাওয়ার আশা করব (মূল বাস্তবায়ন বেশ অস্থির) এবং এটি পাবলিক ডোমেনে প্রকাশ করতে। আমি আপনাকে এও বলতে পারি যে আমি এই ডেমোটি সনি এরিকসনের কাছ থেকে শুরু করে সমস্ত 'x' থেকে 'y' এবং সমস্ত 'প্রস্থকে' উচ্চতাতে পরিবর্তন করে শুরু করেছি। তারপরে আমি 3 ডি রূপান্তরগুলি সরিয়েছি এবং স্টপ-এ-এ-এ-শেষের আচরণটি যুক্ত করেছি।
নিল ট্রাফ্ট

@ নীল ট্রাফ্ট কীভাবে আপনি আইটেমের অবস্থান ঠিক করেছেন? এবং শেষে থামার কি?
অ্যাড্রিয়ান ম্যাগডাস

সত্যিই, এটি সত্যিই ছিল অনুমানের কাজ। এটি সঠিকভাবে পেতে বেশ দীর্ঘ সময় নিয়েছে এবং আমি নিশ্চিত যে আরও ভাল উপায় আছে। তবে মৌলিক ভিত্তিটি হল, fillListDown()পদ্ধতিতে, আপনাকে শেষ তালিকা আইটেমের নীচের প্রান্তের ট্র্যাক রাখতে হবে। আপনি শেষ আইটেমটি তৈরি না করা অবধি আপনি জানেন না যে প্রান্তটি কোথায় রয়েছে (অ্যাডাপ্টার.জেটকাউন্ট () - 1)। সুতরাং আপনি সেই আইটেমটি তৈরি না হওয়া পর্যন্ত অপেক্ষা করুন এবং তারপরে আপনি প্রান্তের অবস্থানটি সঞ্চয় করতে পারেন। একবার আপনি এটি জানেন, আপনি নিশ্চিত করতে পারেন যে এমলিস্টটপ কখনও 0 এর চেয়ে কম নয় এবং কখনই তালিকার উচ্চতার চেয়ে বেশি নয়।
নীল ট্রাফট

1
আপনি যদি সত্যিই সত্যিই না থাকেন তবে নিখুঁতভাবে একটি অনুভূমিক তালিকার প্রয়োজন হয়, আমি আপনাকে দৃ give়ভাবে ছেড়ে দিতে বা গ্যালারীটি ব্যবহার করতে উত্সাহিত করব।
নীল ট্রাফট

3

আমার এক প্রকল্পের জন্য আমাকে একই কাজ করতে হয়েছিল এবং আমি নিজের লেখাটিও শেষ করেছি। আমি এটিকে হরজলিস্টভিউ বলেছি এটি এখন আমার ওপেন সোর্স আনিক্রয়েড লাইব্রেরির অংশ is

http://aniqroid.sileria.com/doc/api/ (নীচে ডাউনলোডগুলি সন্ধান করুন বা আরও ডাউনলোডের বিকল্পগুলি দেখতে গুগল কোড প্রকল্পটি ব্যবহার করুন: http://code.google.com/p/aniqroid/downloads/list )

ক্লাস ডকুমেন্টেশনটি এখানে: http://aniqroid.sileria.com/doc/api/com/sileria/android/view/HorzListView.html


আমি কীভাবে প্রোগ্রামক্রমে স্ক্রোল অবস্থান নির্ধারণ করতে পারি?
Dima Portenko

সেটস্লেশন () পদ্ধতিটি রয়েছে তবে এটি 100% প্রয়োগ করা যাবে না। চেষ্টা করে দেখুন
সিলেরিয়া

1

আমার অ্যাপ্লিকেশনটির জন্য, আমি ভিতরে লিনিয়ারলআউট সমেত একটি অনুভূমিকস্ক্রোলভিউ ব্যবহার করি, যেখানে ওরিয়েন্টেশন অনুভূমিকভাবে সেট করা আছে। ভিতরে চিত্র যুক্ত করার জন্য, আমি ক্রিয়াকলাপের অভ্যন্তরে ইমেজভিউগুলি তৈরি করি এবং এগুলি আমার লিনিয়ারলয়েটে যুক্ত করি। উদাহরণ স্বরূপ:

<HorizontalScrollView 
        android:id="@+id/photo_scroll"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:scrollbars="horizontal"
        android:visibility="gone">

        <LinearLayout 
            android:id="@+id/imageview_holder"
            android:layout_width="wrap_content"
            android:orientation="horizontal"
            android:layout_height="match_parent">

        </LinearLayout>
    </HorizontalScrollView>

এটি আমার জন্য পুরোপুরি সূক্ষ্ম কাজ করে। ক্রিয়াকলাপে আমাকে যা করতে হবে তা হ'ল নীচের কোডের মতো:

LinearLayout imgViewHolder = findViewById(R.id.imageview_holder);
ImageView img1 = new ImageView(getApplicationContext());
//set bitmap
//set img1 layout params
imgViewHolder.add(img1);
ImageView img2 = new ImageView(getApplicationContext());
//set bitmap
//set img2 layout params
imgViewHolder.add(img2); 

যেমনটি আমি বলেছিলাম যে এটি আমার পক্ষে কাজ করে এবং আমি আশা করি যে এটি কারও পক্ষে এটি অর্জন করতে সহায়তা করবে।


0

ভাল আপনি সর্বদা আপনার পাঠ্যদর্শনগুলি গতিশীলরূপে তৈরি করতে পারেন এবং আপনার অনক্লিকলেস্টনারদের সেট করতে পারেন যেমন আপনি একটি অ্যাডাপ্টারের সাথে করেন


আপনি কি বোঝাতে চেয়েছেন? আমি তোমাকে পেতে পারি না? আপনার ধারণা সম্পর্কে কোড স্নিপেট পোস্ট করুন?
প্রবীণ

দয়া করে আমাকে বলুন "অনুভূমিক তালিকার দর্শন" এর উদ্দেশ্যটি কি জটিল / মাল্টি ভিউ করবে? যেমন 2 টি পাঠ্যবাক্স 1 অগ্রগতি? বা কেবল সরল পাঠ্যটি বলা যাক? এছাড়াও সেই দৃশ্যের অভ্যন্তরে কি আপনার নির্দিষ্ট সংখ্যক উপাদান রয়েছে বা আপনি এটি পরিবর্তনশীল করতে চান? এগুলি আমাকে উত্তর দিন এবং আমি কোড সহ আপনাকে সহায়তা করতে সক্ষম
হবো

আমি অনুভূমিক পাঠ্য গ্যালারী করতে চাই। তবে নির্বাচিত আইটেমটি ডিফল্ট হিসাবে কেন্দ্রে আসে। আমি নির্বাচিত আইটেমটি হতে চাই যেখানে সেখানে ক্লিক করেছি। দয়া করে আমার পোস্টগুলিও দেখুন: স্ট্যাকওভারফ্লো / প্রশ্নগুলি
প্রবীণ

0

যখন অ্যাডাপ্টারের ডেটা অন্য থ্রেডের সাথে জড়িত থাকে তখন HorizontialListView কাজ করতে পারে না। সমস্ত কিছুই ইউআই থ্রেডে 100% চলে mult এটি মাল্টিথ্রেডে একটি বড় সমস্যা। আমি মনে করি হরিজন্টিস্টলিস্টভিউ ব্যবহার করা আপনার সমস্যার জন্য সর্বোত্তম সমাধান নয় z হার্জলিস্টভিউ একটি ভাল উপায় just আপনি কেবল আপনার পূর্ববর্তী গ্যালারীটি হরজলিস্টভিউয়ের সাথে প্রতিস্থাপন করুন You আপনাকে অ্যাডাপ্টারের সম্পর্কে কোডটি পরিবর্তন করতে হবে না hen তারপরে সবকিছু আপনার আশা মতো চলে যায় goes দেখুন https: // stackoverflow.com/a/12339708/1525777 HorzListView সম্পর্কে।


0

আমি আমার প্রকল্পে অনুভূমিক তালিকা সংযোগ লিঙ্কটি ব্যবহার করেছি এবং আমি ভাল ফলাফল পেয়েছি। আমি প্রথম দিকে ডেভস্মার্ট লাইব্রেরি ব্যবহার করেছি তবে এটি আমাকে কিছু সমস্যা দিয়েছে। আমার সমস্যাগুলি পুনরুদ্ধার করার সাথে সাথে অনুভূমিক তালিকার লিঙ্কটি ব্যবহার করার সর্বোত্তম উপায় এবং আমি সম্প্রতি এই লাইব্রেরিটি ব্যবহার করে গুগল প্লেস্টোরে আমার অ্যাপ্লিকেশন চালু করেছি এবং ব্যবহারকারীদের কাছ থেকে চমৎকার সাড়া পেয়েছি। সুতরাং আমি আপনাকে অনুরূপ লাইব্রেরিটি ব্যবহার করার পরামর্শ দিচ্ছি যা আমি উপরে উল্লিখিত উল্লিখিত চিত্রটি অনুভূমিকভাবে প্রদর্শন করতে চাই। উপভোগ করুন :)


0

এর জন্য একটি দুর্দান্ত গ্রন্থাগার রয়েছে, যার নাম টুওয়ে ভিউ , এটি বাস্তবায়ন করা খুব সহজ, কেবল আপনার প্রকল্পের প্রকল্পের লাইব্রেরিটিকে আপনার কাজের জায়গাতে অন্তর্ভুক্ত করুন এবং এটি আপনার মূল প্রকল্পে একটি লাইব্রেরি প্রকল্প হিসাবে যুক্ত করুন, এবং তারপরে নীচের পদক্ষেপগুলি অনুসরণ করুন যা মূলত এখানে উল্লেখ করা হয়েছে :

প্রথমে, তালিকা (ভিউ / অনুভূমিক / উল্লম্ব) এর (রেজোল / মান / স্টাইলস.এক্সএমএল) এর ওরিয়েন্টেশন নির্দেশক একটি স্টাইল যুক্ত করুন:

<style name="TwoWayView">
    <item name="android:orientation">horizontal</item>
</style>

তারপর,

আপনার লেআউট এক্সএমএলে, টুওয়ে ভিউ যুক্ত করতে নিম্নলিখিত কোডটি ব্যবহার করুন:

<org.lucasr.twowayview.TwoWayView 
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/lvItems"
     style="@style/TwoWayView"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:drawSelectorOnTop="false"
     tools:context=".MainActivity" />

এবং অবশেষে, কেবল এটি ঘোষণা করুন এবং এটির সাথে নিয়মিত মত আচরণ করুন ListView:

TwoWayView lvTest = (TwoWayView) findViewById(R.id.lvItems);

সকল পদ্ধতি ListViewযথারীতি এখানে কাজ করবে কিন্তু এর একটিই পার্থক্য আমি লক্ষ্য করেছি, যা যখন পছন্দ মোড সেটিং পদ্ধতি setChoiceModeনয় লাগে intমান কিন্তু থেকে একটি মান enumনামক ChoiceMode, তাই list_view.setChoiceMode(ListView.CHOICE_MODE_SINGLE);হবে lvTest.setChoiceMode(ChoiceMode.SINGLE); // or MULTIPLE or NONE


1
আমি এটি চেষ্টা করেছি - তবে এটি আমাকে আমার নিজের অ্যারেএডাপ্টার <পূর্বরূপ চিত্র>
49

-1

আপনি XML লেআউটটি অন্তর্ভুক্ত করতে এবং চিত্রগুলি যুক্ত করতে, ভিউফ্লিপার ব্যবহার করতে পারেন X

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.