利用我创建的列表视图。 Android的

时间:2011-12-07 10:25:08

标签: android listview

我正在尝试使用列表视图,我已设法创建一个,它完美地工作。然而,它在一个新的屏幕上创建自己。我想知道如何在主菜单中使用已创建的列表视图(由main.xml定义)。

我的Java代码:

public class Option2Activity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Intent startNewActivityOpen = new Intent(Option2Activity.this, ListViewActivity.class);
        startActivityForResult(startNewActivityOpen, 0);
    }
}


public class ListViewActivity extends ListActivity
{
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        ListView lv = (ListView)findViewById(R.id.listview_main);
        // Currently unused... 

        Context ctx = getApplicationContext();
        Resources res = ctx.getResources();

        String[] options = res.getStringArray(R.array.list_titles);
        TypedArray icons = res.obtainTypedArray(R.array.list_icons);

        setListAdapter(new Adapter(ctx, R.layout.list_item, options, icons));
        //I tried using lv.setAdapter(new Adapter(ctx, R.layout.list_item, options, icons));
        //but it didn't work. 'setListAdapter' is creating a new listview in another screen

    }
}

public class Adapter extends ArrayAdapter<String> {

    private LayoutInflater mInflater;
    private String[] mStrings;
    private TypedArray mIcons;

    private int mViewResourceId;

    public Adapter(Context ctx, int viewResourceId, String[] strings, TypedArray icons) 
    {   
        super(ctx, viewResourceId, strings);

        mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        mStrings = strings;
        mIcons = icons;
        mViewResourceId = viewResourceId;
    }

    @Override
    public int getCount() 
    {
        return mStrings.length;
    }

    @Override
    public String getItem(int position) 
    {
        return mStrings[position];
    }

    @Override
    public long getItemId(int position) 
    {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) 
    {
        convertView = mInflater.inflate(mViewResourceId, null);

        Button ib = (Button)convertView.findViewById(R.id.list_button);
        ib.setText(mStrings[position]);
        ib.setCompoundDrawables((mIcons.getDrawable(position)), null, null, null);
            //this doesn't work either, it is supposed to set an image in the button
            //if anyone knows how to help me I'd appreciate but it isn't the main issue

        TextView tv = (TextView)convertView.findViewById(R.id.list_text);
        tv.setText(mStrings[position]);

        return convertView;
    }
}

XML

main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >



    <RelativeLayout
        android:id="@+id/relativeLayout1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <ImageView
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_alignParentLeft="true"
            android:maxHeight="50dp"
            android:maxWidth="50dp"
            android:src="@drawable/newsimage" />

        <ImageView
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_alignParentRight="true"
            android:maxHeight="50dp"
            android:maxWidth="50dp"
            android:src="@drawable/newsimage" />

        <TextView
            android:id="@+id/textView1"
            android:layout_marginTop="7dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_alignParentTop="true"
            android:text="Option 2 Menu"
            android:textSize="25dp" />
    </RelativeLayout>

    <ListView 
        android:id="@+id/listview_main"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
    </ListView>

    <ImageView 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:src="@drawable/newspaper" 
        android:scaleType="fitXY"
        />

</LinearLayout>

list_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView 
    android:id="@+id/list_text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:textSize="24dp"
    android:padding="6dp" 
    />

    <Button
        android:id="@+id/list_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
    />


</LinearLayout>

我认为这是所有相关的代码。先感谢您。我还想包括从我在论坛中搜索过的其他开发人员引用的一段代码。

固定

public class Option2Activity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ListView lv = (ListView)findViewById(R.id.listview_main);


        Context ctx = getApplicationContext();
        Resources res = ctx.getResources();

        String[] options = res.getStringArray(R.array.list_titles);
        TypedArray icons = res.obtainTypedArray(R.array.list_icons);

        lv.setAdapter(new Adapter(ctx, R.layout.list_item, options, icons));

    }
}

与最新用户的回复不完全一样。但它奏效了。不需要ListViewActivity。

谢谢论坛。

1 个答案:

答案 0 :(得分:0)

删除ListViewActivity活动只需使用我在下面提供的活动

public class Option2Activity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

       ListView lv = (ListView)findViewById(R.id.listview_main);
        // Currently unused... 

        Context ctx = getApplicationContext();
        Resources res = ctx.getResources();

        String[] options = res.getStringArray(R.array.list_titles);
        TypedArray icons = res.obtainTypedArray(R.array.list_icons);

        lv.setListAdapter(new Adapter(ctx, R.layout.list_item, options, icons));

    }

    public class Adapter extends ArrayAdapter<String> {

    private LayoutInflater mInflater;
    private String[] mStrings;
    private TypedArray mIcons;

    private int mViewResourceId;

    public Adapter(Context ctx, int viewResourceId, String[] strings, TypedArray icons) 
    {   
        super(ctx, viewResourceId, strings);

        mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        mStrings = strings;
        mIcons = icons;
        mViewResourceId = viewResourceId;
    }

    @Override
    public int getCount() 
    {
        return mStrings.length;
    }

    @Override
    public String getItem(int position) 
    {
        return mStrings[position];
    }

    @Override
    public long getItemId(int position) 
    {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) 
    {
        convertView = mInflater.inflate(mViewResourceId, null);

        Button ib = (Button)convertView.findViewById(R.id.list_button);
        ib.setText(mStrings[position]);
        ib.setCompoundDrawables((mIcons.getDrawable(position)), null, null, null);
            //this doesn't work either, it is supposed to set an image in the button
            //if anyone knows how to help me I'd appreciate but it isn't the main issue

        TextView tv = (TextView)convertView.findViewById(R.id.list_text);
        tv.setText(mStrings[position]);

        return convertView;
    }

}

试试这个,