PDA

View Full Version : شنونده برای لیست ویو



amn.bhr
پنج شنبه 03 اردیبهشت 1394, 10:27 صبح
سلام
من این شنونده رو برای لیست ویو دارم


mDrawerList.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int post, long arg3) {
nav_btn_txt = getResources().getStringArray(R.array.nav_buttons)[post];
Toast.makeText(getBaseContext(),"on the "+nav_btn_txt+" clciked", Toast.LENGTH_SHORT).show();
mDrawerLayout.closeDrawer(mDrawerList);
}

});

و لیست ویو داخل xml اینجوریه

<RelativeLayout
android:layout_width="300dp"
android:layout_height="match_parent"
android:layout_gravity="start">

<ImageView
android:id="@+id/img"
android:layout_width="300dp"
android:layout_height="170dp"
android:src="@drawable/ic_fragment"/>

<ListView
android:layout_below="@+id/img"
android:id="@+id/left_drawer"
android:layout_width="300dp"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="@android:color/transparent"/>

</RelativeLayout>


وقتی لیست ویو رو از RelativeLayout خارج میکنم شنونده درست کار میکنه و وقتی داخل layout هست با کلیک روی یکی از آیتم های لیست ویو برنامه کرش میکنه.

میشه بفرمایید اشکال از کجاست.
ممنون

iman0111
پنج شنبه 03 اردیبهشت 1394, 11:09 صبح
سلام دوست عزیز این مشکل میتونه از لایه بندی شما توی صفحه ی xml باشه که در این صورت باید اناتومی و زیر ساخت لایه بندیتون رو تغییر بدین در غیر این صورت شما اون پیغام خطایی رو که برنامه میده اینجا بزار تا بررسی بشه

amn.bhr
پنج شنبه 03 اردیبهشت 1394, 12:00 عصر
بعد از کلیک روی یکی از آیتم های لیست ویو این ارور هارو میده



04-23 12:36:42.655 25096-25096/com.example.appname E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.support.v4.widget.DrawerLayout$LayoutParam s
at android.support.v4.widget.DrawerLayout.isDrawerVie w(DrawerLayout.java:1100)
at android.support.v4.widget.DrawerLayout.closeDrawer (DrawerLayout.java:1305)
at com.example.appname.MainActivity$1.onItemClick(Mai nActivity.java:52)
at android.widget.AdapterView.performItemClick(Adapte rView.java:298)
at android.widget.AbsListView.performItemClick(AbsLis tView.java:1150)
at android.widget.ListView.performItemClick(ListView. java:4397)
at android.widget.AbsListView$PerformClick.run(AbsLis tView.java:2985)
at android.widget.AbsListView$1.run(AbsListView.java: 3671)
at android.os.Handler.handleCallback(Handler.java:615 )
at android.os.Handler.dispatchMessage(Handler.java:92 )
at android.os.Looper.loop(Looper.java:155)
at android.app.ActivityThread.main(ActivityThread.jav a:5511)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:1029)
at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:796)
at dalvik.system.NativeStart.main(Native Method)

tux-world
پنج شنبه 03 اردیبهشت 1394, 14:51 عصر
شما انگار DrawerLayout رو به یه LinearLayout کست کردید. تو کد نویسی اشتباه کردید. لایه درسته

amn.bhr
پنج شنبه 03 اردیبهشت 1394, 17:45 عصر
این متد OnCreate هست، بقیه کدها ربطی به موضوع نداره دیگه نمیذارم
mDrawerLayout رو به DrawerLayout کست کردم

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

toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(tr ue);
getSupportActionBar().setHomeButtonEnabled(true);

titles = getResources().getStringArray(R.array.nav_buttons) ;
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);

mDrawerList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, titles));

mDrawerList.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int post, long arg3) {
nav_btn_txt = getResources().getStringArray(R.array.nav_buttons)[post];
Toast.makeText(getBaseContext(),"clicked on "+nav_btn_txt, Toast.LENGTH_SHORT).show();

mDrawerLayout.closeDrawer(mDrawerList);
}

});
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {

public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
getSupportActionBar().setTitle(nav_btn_txt);
supportInvalidateOptionsMenu();
}

public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
getSupportActionBar().setTitle("settings");
supportInvalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
}


و layout اصلی هم به این شکله


<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<RelativeLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent">

<include android:id="@+id/toolbar"
layout="@layout/toolbar"/>

<TextView
android:layout_below="@+id/toolbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"/>

</RelativeLayout>

<RelativeLayout
android:layout_width="300dp"
android:layout_height="match_parent"
android:layout_gravity="start">

<ImageView
android:id="@+id/img"
android:layout_width="300dp"
android:layout_height="170dp"
android:src="@drawable/ic_fragment"/>

<ListView
android:layout_below="@+id/img"
android:id="@+id/left_drawer"
android:layout_width="300dp"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="@android:color/transparent"/>

</RelativeLayout>

</android.support.v4.widget.DrawerLayout>

وقتی لیست ویو تنها باشه درست عمل میکنه ولی وقتی به این شکل هست با کلیک کرش میکنه

ممنون از راهنمایی هاتون

iman0111
پنج شنبه 03 اردیبهشت 1394, 18:27 عصر
دوست عزیز من فک میکنم که شما دازید از کتابخانه appcompact استفاده میکنید و قصد دارید که به لایه تون منوی کشویی اضافه کنید اگه اینجوریه شما باید از framelayout به جای relativelayout استفاده کنین

amn.bhr
یک شنبه 06 اردیبهشت 1394, 09:34 صبح
ایمان جان بله از appcompact استفاده میکنم.
RealativeLayoutها رو به FrameLayout تغییر دادم ولی باز هم کرش کرد