Double ListView в Android FrameLayout
У меня есть один Drawerlayout, когда я запускаю приложение, данные в MainActivity с pagemain_layout(frame_container)... Все хорошо. Но когда я нажимаю на элемент в раскрывающемся ящике, появляется двойной список в pagemain_layout.
Пожалуйста... Дайте мне решение или отредактируйте мой код.
Большое спасибо!
Код MainActivity
public class MainActivity extends Activity {
private DrawerLayout mDrawerLayout;
private ListView mListDrawer;
private ActionBarDrawerToggle mDrawerToggle;
private CharSequence mDrawerTitle;
private CharSequence mTitle;
private String[] navMenuTitles;
NavDrawerItemsAdapter adapterTest;
FragmentManager fragmentManager;
ListView lvItemLayoutMain;
ProgressDialog pDialog;
ArrayList<String> mListTitle;
ArrayList<String> mListURL;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pagemain_layout);
mTitle = mDrawerTitle = getTitle();
List<Integer> mListHeader = new ArrayList<Integer>();
mListHeader.add(0);
mListHeader.add(5);
adapterTest = new NavDrawerItemsAdapter(MainActivity.this,
NavigationListItem.getListItemAdapter(this, mListHeader));
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mListDrawer = (ListView) findViewById(R.id.list_slidermenu);
navMenuTitles = getResources().getStringArray(R.array.title);
lvItemLayoutMain = (ListView) findViewById(R.id.list_item_main);
mListDrawer.setOnItemClickListener(new SlideMenuClickListener());
mListDrawer.setAdapter(adapterTest);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
new LoadData().execute();
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer, R.string.app_name, R.string.app_name) {
@Override
public void onDrawerOpened(View view) {
getActionBar().setTitle(mDrawerTitle);
invalidateOptionsMenu();
}
@Override
public void onDrawerClosed(View view) {
getActionBar().setTitle(mTitle);
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
if (savedInstanceState == null) {
displayView(0);
}
}
private void displayView(int position) {
// update the main content by replacing fragments
Fragment fragment = null;
FragmentTransaction transaction = fragmentManager.beginTransaction();
switch (position) {
case 1:
fragment = new HotNewsFragment();
break;
case 2:
fragment = new FocusNewsFragment();
break;
case 3:
fragment = new EducationInfoFragment();
break;
case 4:
fragment = new WorkingStudentsFragment();
break;
case 6:
fragment = new TimeTableFragment();
break;
case 7:
fragment = new NoteFragment();
break;
default:
break;
}
if (fragment != null) {
fragmentManager = getFragmentManager();
transaction.replace(R.id.frame_container, fragment).commit();
transaction.addToBackStack(null);
transaction.commit();
// update selected item and title, then close the drawer
mListDrawer.setItemChecked(position, true);
mListDrawer.setSelection(position);
setTitle(navMenuTitles[position]);
mDrawerLayout.closeDrawer(mListDrawer);
} else {
Log.e("MainActivity", "Error in creating fragment");
}
}
private class SlideMenuClickListener implements
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// display view for selected nav drawer item
displayView(position);
}
}
@Override
public void setTitle(CharSequence title) {
mTitle = title;
getActionBar().setTitle(title);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// toggle nav drawer on selecting action bar app icon/title
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
// Handle action bar actions click
switch (item.getItemId()) {
case R.id.action_settings:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Pass any configuration change to the drawer toggls
mDrawerToggle.onConfigurationChanged(newConfig);
}
class LoadData extends AsyncTask<Void, Void, Vector<ArrayList<String>>> {
String Url = "http://ued.vn/rss/cong-tac-sinh-vien.rss";
Vector<ArrayList<String>> data = new Vector<ArrayList<String>>();
final String KEYGROUP = "Thông báo";
@Override
protected void onPreExecute() {
pDialog = ProgressDialog.show(MainActivity.this, "", "Loading...");
mListTitle = new ArrayList<String>();
mListURL = new ArrayList<String>();
super.onPreExecute();
}
@Override
protected Vector<ArrayList<String>> doInBackground(Void... params) {
data = Utils.getDataNews(Url, KEYGROUP);
return data;
}
@Override
protected void onPostExecute(Vector<ArrayList<String>> result) {
if (data != null) {
pDialog.dismiss();
mListTitle = data.get(0);
NewsHotAdapter adapter = new NewsHotAdapter(MainActivity.this,
R.layout.item_layout, mListTitle);
lvItemLayoutMain.setAdapter(adapter);
}
super.onPostExecute(result);
}
}
}
И код в pagemain_layout.xml
<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" >
<FrameLayout
android:id="@+id/frame_container"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/list_item_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:dividerHeight="1dp" />
</FrameLayout>
<ListView
android:id="@+id/list_slidermenu"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@color/list_background"
android:choiceMode="singleChoice"
android:divider="@color/list_divider"
android:dividerHeight="1dp"
android:listSelector="@drawable/list_selector" />
</android.support.v4.widget.DrawerLayout>
Проблема здесь!
1 ответ
Пожалуйста, удалите android:layout_gravity="start"
определено в Listview FrameLayout в XML. Ваш код должен быть следующим,
<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" >
<FrameLayout
android:id="@+id/frame_container"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/list_item_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:dividerHeight="1dp" />
</FrameLayout>
<ListView
android:id="@+id/list_slidermenu"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@color/list_background"
android:choiceMode="singleChoice"
android:divider="@color/list_divider"
android:dividerHeight="1dp"
android:listSelector="@drawable/list_selector" />
</android.support.v4.widget.DrawerLayout>
Попробуйте этот код и дайте мне знать.