itemclick上的Android片段(listview)

时间:2014-03-11 06:13:15

标签: android android-fragments android-listview

我想要一个活动,在它的布局中我将有一个固定内容(数组)的列表视图,在右侧我想要动态内容(所以我决定:片段)。 我的MainLayout就像这样(activity_vizitarea.xml):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="ro.softwarex.bellaapp.procesarevizita.app.VizitareaActivity">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true">

        <ListView
            android:layout_width="20dp"
            android:layout_height="wrap_content"
            android:id="@id/id_vizita_jobs"
            android:layout_weight="1" />

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="400dp"
            android:layout_height="fill_parent"
            android:id="@id/id_fragment_container"></LinearLayout>
    </LinearLayout>
</RelativeLayout>

最后一个LinearLayout将保存片段

我的活动如下:

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class VizitareaActivity extends Activity {
    ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_vizitarea);

        // Get ListView object from xml
        listView = (ListView) findViewById(R.id.id_vizita_jobs);

        // Defined Array values to show in ListView
        String[] values = new String[] { "First category",
                "Second category",
                "Third category",
                "Fourth category",
                " and so on",
                "Last category"
        };


        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, android.R.id.text1, values);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
                int itemPosition     = position;
                String  itemValue    = (String) listView.getItemAtPosition(position);
                Toast.makeText(getApplicationContext(),
      "Position :" + itemPosition + "  ListItem : " + itemValue, Toast.LENGTH_SHORT)
                        .show();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.vizitarea, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

}

片段看起来像这样:

public class FirsCatFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_firstcat_layout, container, false);
    }
}

它的布局是这样的(fragment_firstcat_layout.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ToggleButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New ToggleButton"
        android:id="@+id/toggleButton" />

    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New RadioButton"
        android:id="@+id/radioButton" />

    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New CheckBox"
        android:id="@+id/checkBox" />
</LinearLayout>

所以我的行为应该是:从listView中点击一个类别,应该加载相应的片段......但是我不知道如何实现它。

我想它是onItemClick中的某个地方,一个case或if语句检查被点击项的位置,并根据该数字决定要调出哪个片段。 但我似乎并不知道这是如何工作的。我在网上检查了多个教程,但似乎无法使其正常工作。

活动的原理类似于iOS中的“设置”页面(仅适用于Android)。就像在这张图片中一样:

enter image description here

我知道有NavigationDrawer但不建议少于3个顶级元素。我只想要2个级别:主要和细节,类别和类别的细节。就是这样。

你能帮我解决这个问题吗? 谢谢

1 个答案:

答案 0 :(得分:0)

对于左侧列表视图,您可以转到Navigation Drawer并在导航栏上加载列表视图。并在框架布局上加载相关的片段。请点击此链接:http://www.androidhive.info/2013/11/android-sliding-menu-using-navigation-drawer/

查看本教程:http://android-er.blogspot.in/2013/04/replace-fragment.html

这里的主要布局有FrameLayout,名为maincontainer 在onitem内点击你的列表视图是这样的:

MyFragment1 fragment = (MyFragment1)myFragmentManager.findFragmentByTag(TAG_1);

    if (fragment == null) {


     FragmentTransaction fragmentTransaction = myFragmentManager.beginTransaction();
     fragmentTransaction.replace(R.id.maincontainer, myFragment1, TAG_1);
     fragmentTransaction.commit();

    }else{

     fragment.setMsg("MyFragment1 already loaded");
    }
   }});

每次maincontainer替换新片段。