في اكمال لسلسة تطبيقات اندرويد وير سنقوم اليوم بشرح انشاء قائمة بسيطة تساعدنا في معرفة عمل القوائم في تطبيقات اندرويد وير ولايخفى عليكم ان اكثر العناصر استخدام في التطبيقات هي القوائم ? .
في البداية سنحتاج الى انشاء تطبيق اندرويد وير جديد راجع هنا.
-
استخدام WearableListView :
تحتوي مكتبة wearable على مكون خاص للتعامل مع القوائم ويحتوي على خصائص ListView ولكن موجهه للاندرويد وير ويمكن اضافته الى ملف التصميم – Layout – كما في الاسفل :
<android.support.wearable.view.WearableListView android:id="@+id/wearable_list" android:layout_height="match_parent" android:layout_width="match_parent"> </android.support.wearable.view.WearableListView>
-
اضافة العناصر الى List ( القائمة ) :
تعلمنا في انشاء تطبيقات Android ان اي قائمة تحتاج الي Adapter وهنا لايوجد اختلاف فاي قائمة تحتاج الى Adapter ولكن سيكون بطريقة مختلفة كما سنلاحظ الان في الكود بالاسفل :
public class MyAdapter extends WearableListView.Adapter { private final LayoutInflater mInflater; ArrayList<String> listItems; public MyAdapter(Context context, ArrayList<String> listItems) { mInflater = LayoutInflater.from(context); this.listItems = listItems; } @Override public WearableListView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new WearableListView.ViewHolder( mInflater.inflate(R.layout.row_simple_item_layout, null)); } @Override public void onBindViewHolder(WearableListView.ViewHolder holder, int position) { TextView view = (TextView) holder.itemView.findViewById(R.id.textView); view.setText(listItems.get(position)); holder.itemView.setTag(position); } @Override public int getItemCount() { return listItems.size(); } }
في البداية نلاحظ ان Class وريث من WearableListView للتعامل مع List الخاصة باندرويد وير وقمنا باضافة Constructr لارسال البيانات من Activity الرئيسي ايضا نلاحظ وجود دالة onCreateViewHolder لربط التصميم الخاص بنا للعناصر مع الـAdapter اما دالة onBindViewHolder فستكون لعرض عناصر القائمة وتعبئتها واخيرا دالة getItemCount قستكون لاعادة عدد عناصر القائمة .
-
ارسال البيانات من Activity :
سنقوم اولا بتعريف WearableListView كما تعلمنا في تطبيقات اندرويد وسنقوم باستدعاء Class Adapter وارسال البيانات الى Adapter ثم وضعها داخل WearableListView كما سنلاحظ في الكود القادم :
public class MainActivity extends Activity implements WearableListView.ClickListener { private WearableListView mListView; private ArrayList<String> listItems = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL); final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub); stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() { @Override public void onLayoutInflated(WatchViewStub stub) { // Add Views here listItems.add("اذكار الصباح"); listItems.add("اذكار المساء"); listItems.add("اذكار النوم"); listItems.add("اذكار اخرى"); listItems.add("ادعية"); mListView = (WearableListView) stub.findViewById(R.id.wearable_list); mListView.setAdapter(new MyAdapter(MainActivity.this, listItems)); mListView.setClickListener(MainActivity.this); } }); } @Override public void onClick(WearableListView.ViewHolder viewHolder) { //لتخصيص كل عنصر استخدم /* switch (viewHolder.getAdapterPosition()){ case 0: break; case 1: break; ... } */ Toast.makeText(this, "" + listItems.get(viewHolder.getLayoutPosition()), Toast.LENGTH_SHORT).show(); } @Override public void onTopEmptyRegionClick() { } }
في البداية implements لـWearableListView.ClickListner حتى يقوم بتنفيذ مهمة عند الضغط على اي من عناصر القائمة وايضا قمنا بتعريف WearableListView وايضا انشئنا ArrayList ليكون مستودع للبيانات الذي سنقوم بعرضها للمستخدم
mListView.setAdapter(new MyAdapter(MainActivity.this, listItems));
قمنا باضافة Adapter الى WearableListView .
@Override public void onClick(WearableListView.ViewHolder viewHolder) { //لتخصيص كل عنصر استخدم /* switch (viewHolder.getAdapterPosition()){ case 0: break; case 1: break; ... } */ Toast.makeText(this, "" + listItems.get(viewHolder.getLayoutPosition()), Toast.LENGTH_SHORT).show(); }
دالة لتنفيذ مهمة عند الضغط على اي من عناصر القائمة .
@Override public void onTopEmptyRegionClick() { }
هنا اذا قام المستخدم بالضغط على الفراغ الذي يسبق العنصر الاول في القائمة .
-
النتيجة :