如何在listactivity actionbar中设置actiongbar

Combining ListActivity and ActionBarActivity [结合listactivity和actionbaractivity] - 问题-字节技术
Combining ListActivity and ActionBarActivity
结合listactivity和actionbaractivity
问题 (Question)
I am currently building for a minimum SDK of 10, so I have to use the android-support-v7-appcompat library to implement action bar. I have setup the action bar, but I want to now add a listActivity, however this requires extending my class and Java doesn't have multiple inheritance. What should I do?
public class MainActivity extends ActionBarActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
getSupportActionBar().setIcon(R.drawable.ic_action_search);
getSupportActionBar().setDisplayShowHomeEnabled(false);
getSupportActionBar().setDisplayShowTitleEnabled(false);
inflater.inflate(R.menu.main_activity_actions, menu);
return super.onCreateOptionsMenu(menu);
我目前是一个最小的SDK 10楼,所以我不得不使用android-support-v7-appcompat库实现的行动吧。我已经设置的行动吧,但我想现在添加一个listactivity,然而这需要扩展我的类和Java没有多重继承。我应该做什么?public class MainActivity extends ActionBarActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
getSupportActionBar().setIcon(R.drawable.ic_action_search);
getSupportActionBar().setDisplayShowHomeEnabled(false);
getSupportActionBar().setDisplayShowTitleEnabled(false);
inflater.inflate(R.menu.main_activity_actions, menu);
return super.onCreateOptionsMenu(menu);
最佳答案 (Best Answer)
ListActivity hasn't been ported to AppCompat. Probably because you should consider it 'deprecated', and instead use a ListFragment.
Fragments will work with a ActionBarActivity, just make sure they are fragments from the support library.
Have a read through
link about fragments.
For your use case, I would just define the fragment in xml.
listactivity没有被移植到appcompat。可能是因为你应该考虑它的“过时的”,而不是使用一个listfragment。碎片将有actionbaractivity工作,确保他们是从支持库的片段。已经通过一读连接片段。你使用的情况下,我只定义在XML片段。
本文翻译自StackoverFlow,英语好的童鞋可直接参考原文:下次自动登录
现在的位置:
& 综合 & 正文
Android中ListActivity的使用和在ListView中添加图片文字
ListActivity简单的说就是ListView和Activity的结合,跟ListView和Activity组合实现的没有什么很大的差别,主要是比较方便。但在实现时,有几点要注意。
1、ListActivity可以不用setContentView(R.layout.main),它默认是LIstView占满屏。
2、如果想在屏幕中显示其他控件,如文本框和按钮之类,可以采用如下方法:
a、中添加:setContentView(R.layout.main)
b、在 main.xml 文件中,添加一个LIstView控件,和一个 TextView 控件,注意它们 id 必须为"@id/android:list"、
"@id/android:empty";前一个表示匹配的ListView,后一个表示若LIstView没有内容则显示的提示:代码如下:
1)main.xml布局文件
&?xmlversion="1.0"encoding="utf-8"?&
&LinearLayoutxmlns:android=""
android:orientation="vertical"android:layout_width="fill_parent"
android:layout_height="fill_parent"&
&LinearLayoutandroid:layout_width="fill_parent"
android:layout_height="wrap_content"&
&EditTextandroid:id="@+id/et_item"android:layout_width="212px"
android:layout_height="wrap_content"&
&/EditText&
&Buttonandroid:id="@+id/bt_add"android:layout_width="83px"
android:layout_height="51px"android:text="添加"&
&/LinearLayout&
&ListViewandroid:id="@id/android:list"android:layout_width="fill_parent"
android:layout_height="0dip"android:layout_weight="1"
android:drawSelectorOnTop="false"/&
&TextViewandroid:id="@id/android:empty"android:layout_width="wrap_content"
android:layout_height="wrap_content"android:text="Can
not find the file!"/&
&/LinearLayout&
下面是截图和代码:
LIstView Item的布局文件list_item.xml
&?xmlversion="1.0"encoding="utf-8"?&
&LinearLayoutandroid:id="@+id/LinearLayout01"
android:layout_width="fill_parent"xmlns:android=""
android:layout_height="wrap_content"&
&ImageViewandroid:layout_width="wrap_content"
android:layout_height="wrap_content"android:id="@+id/ItemImage"/&
&TextViewandroid:layout_height="wrap_content"
android:textSize="20dip"android:layout_width="fill_parent"
android:id="@+id/ItemTitle"/&
&/LinearLayout&
package com.myandroid.
import java.util.ArrayL
import java.util.HashM
import android.app.ListA
import android.os.B
import android.util.L
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.EditT
import android.widget.ListV
import android.widget.SimpleA
public class ListActivityImpl extendsListActivity {
privateButton bt_
privateEditText et_
privateArrayList&HashMap&String, Object&&
//存放文字、图片信息
privateSimpleAdapter listItemA
publicvoid onCreate(Bundle icicle)
super.onCreate(icicle);
setContentView(R.layout.main);
bt_add = (Button)findViewById(R.id.bt_add);
et_item = (EditText)findViewById(R.id.et_item);
initListView();
this.setListAdapter(listItemAdapter);
bt_add.setOnClickListener(newClickEvent());
* 设置适配器内容
privatevoid initListView()
listItems =new ArrayList&HashMap&String, Object&&();
for(inti=0;i&10;i++)
HashMap&String, Object& map =new HashMap&String, Object&();
map.put("ItemTitle","Music: "+i);
map.put("ItemImage", R.drawable.music);
listItems.add(map);
//生成适配器的Item和动态数组对应的元素
listItemAdapter =new SimpleAdapter(this,listItems,
// listItems数据源
R.layout.list_item, //ListItem的XML布局实现
newString[] {"ItemTitle","ItemImage"},
//动态数组与ImageItem对应的子项
newint[ ] {R.id.ItemTitle, R.id.ItemImage}
//list_item.xml布局文件里面的一个ImageView的ID,一个TextView 的ID
protectedvoid onListItemClick(ListView l, View v,int position, long id)
// TODO Auto-generated method stub
Log.e("position","" + position);
setTitle("你点击第"+position+"行");
classClickEvent implementsOnClickListener {
publicvoid onClick (View v)
// 向ListView里添加一项
HashMap&String, Object& map =new HashMap&String, Object&();
map.put("ItemTitle","Music: "+ et_item.getText().toString());
map.put("ItemImage", R.drawable.music);
//每次都放入同样的图片资源ID
listItems.add(map);
//重新设置适配器
ListActivityImpl.this.setListAdapter(listItemAdapter);
这里也涉及到ListView的图片、文字添加方式,本程序是一个图片一行文字
&&&&推荐文章:
【上篇】【下篇】ANDROID ,如何从一个ACTIVITY中的列表LISTVIEW获取所选的列表内容传到另一个ACTIVITY页面中,_百度知道
ANDROID ,如何从一个ACTIVITY中的列表LISTVIEW获取所选的列表内容传到另一个ACTIVITY页面中,
最好要有个例子,简单点,没分了
long arg3) { Intent intent = new Intent(OrderA&#47,& map = (Map&)).setAdapter(adp),DaiActivity.OnItemClickListener() { @Override public void onItemClick(AdapterView&&#47,
new String[]{&&#47?& arg0, View arg1.get(&quot&#47.ListView01);item内的数据保存在map中 Map&lt,&
&#47.getStringExtra(&.S/item点事件).tvDate,当前页面;, int arg2;另一个页面Intent intent = getIntent(), map,R.class);Id&quot.OrderState&;OrderType&Id&S
//;数据源绑定
SimpleAdapter adp = new SimpleAdapter(
&#47.layout,DaiAid&Orderdate&id&quot.this,R.this.startActivity(intent).id.id,
list.tvPrice,R, R, String&gt,&跳转页面 OrderActivity, String&gt.class转至的页面
new int[]{R.tvState.main_,&OrderAString id =
&#47.putExtra(&)lv.getItemAtPosition(arg2);.id.tvId});/
} }).setOnItemClickListener(new ListView,R;定交一个listviewListView lv=(ListView)findViewById(R;显示数据/Price&quot.tvT&#47.&#47.需要的数据在intent中}
其他类似问题
为您推荐:
android的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在Adapter中响应?
对于这个问题,我最初给他的解答是,在Adapter中定义一个回调接口,在Activity中实现该接口,从而实现对点击事件的响应。
下班后思考了一下,觉得有两种方式都能比较好的实现:使用接口回调和使用抽象类回调。
正好可以复习一下接口和抽象类的区别,于是写了两个Demo:
1.使用接口回调:
1 package com.ivan.
3 import java.util.L
5 import android.content.C
6 import android.util.L
7 import android.view.LayoutI
8 import android.view.V
9 import android.view.View.OnClickL
10 import android.view.ViewG
11 import android.widget.BaseA
12 import android.widget.B
13 import android.widget.TextV
15 import com.ivan.listvieweventcallback.R;
17 public class ContentAdapter extends BaseAdapter implements OnClickListener {
private static final String TAG = "ContentAdapter";
private List&String& mContentL
private LayoutInflater mI
private Callback mC
* 自定义接口,用于回调按钮点击事件到Activity
* @author Ivan Xu
public interface Callback {
public void click(View v);
public ContentAdapter(Context context, List&String& contentList,
Callback callback) {
mContentList = contentL
mInflater = LayoutInflater.from(context);
mCallback =
public int getCount() {
Log.i(TAG, "getCount");
return mContentList.size();
public Object getItem(int position) {
Log.i(TAG, "getItem");
return mContentList.get(position);
public long getItemId(int position) {
Log.i(TAG, "getItemId");
public View getView(int position, View convertView, ViewGroup parent) {
Log.i(TAG, "getView");
ViewHolder holder = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item, null);
holder = new ViewHolder();
holder.textView = (TextView) convertView
.findViewById(R.id.textView1);
holder.button = (Button) convertView.findViewById(R.id.button1);
convertView.setTag(holder);
holder = (ViewHolder) convertView.getTag();
holder.textView.setText(mContentList.get(position));
holder.button.setOnClickListener(this);
holder.button.setTag(position);
return convertV
public class ViewHolder {
public TextView textV
//响应按钮点击事件,调用子定义接口,并传入View
public void onClick(View v) {
mCallback.click(v);
Activity类:
1 package com.ivan.
3 import java.util.ArrayL
4 import java.util.L
6 import android.app.A
7 import android.os.B
8 import android.view.M
9 import android.view.V
10 import android.widget.AdapterV
11 import android.widget.AdapterView.OnItemClickL
12 import android.widget.ListV
13 import android.widget.T
15 import com.ivan.adapter.ContentA
16 import com.ivan.adapter.ContentAdapter.C
17 import com.ivan.listvieweventcallback.R;
18 //MainActivity需要实现自定义接口
19 public class MainActivity extends Activity implements OnItemClickListener,
Callback {
// 模拟listview中加载的数据
private static final String[] CONTENTS = { "北京", "上海", "广州", "深圳", "苏州",
"南京", "武汉", "长沙", "杭州" };
private List&String& contentL
private ListView mListV
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
private void init() {
mListView = (ListView) findViewById(R.id.listview);
contentList = new ArrayList&String&();
for (int i = 0; i & CONTENTS. i++) {
contentList.add(CONTENTS[i]);
mListView.setAdapter(new ContentAdapter(this, contentList, this));
mListView.setOnItemClickListener(this);
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
* 响应ListView中item的点击事件
public void onItemClick(AdapterView&?& arg0, View v, int position, long id) {
Toast.makeText(this, "listview的item被点击了!,点击的位置是--&" + position,
Toast.LENGTH_SHORT).show();
* 接口方法,响应ListView按钮点击事件
public void click(View v) {
Toast.makeText(
MainActivity.this,
"listview的内部的按钮被点击了!,位置是--&" + (Integer) v.getTag() + ",内容是--&"
+ contentList.get((Integer) v.getTag()),
Toast.LENGTH_SHORT).show();
2.使用抽象类回调
Adapter类:
1 package com.ivan.
3 import java.util.L
5 import android.content.C
6 import android.util.L
7 import android.view.LayoutI
8 import android.view.V
9 import android.view.View.OnClickL
10 import android.view.ViewG
11 import android.widget.BaseA
12 import android.widget.B
13 import android.widget.TextV
15 import com.ivan.listvieweventabstract.R;
17 public class ContentAdapter extends BaseAdapter {
private static final String TAG = "ContentAdapter";
private List&String& mContentL
private LayoutInflater mI
private MyClickListener mL
public ContentAdapter(Context context, List&String& contentList,
MyClickListener listener) {
mContentList = contentL
mInflater = LayoutInflater.from(context);
mListener =
public int getCount() {
Log.i(TAG, "getCount");
return mContentList.size();
public Object getItem(int position) {
Log.i(TAG, "getItem");
return mContentList.get(position);
public long getItemId(int position) {
Log.i(TAG, "getItemId");
public View getView(int position, View convertView, ViewGroup parent) {
Log.i(TAG, "getView");
ViewHolder holder = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item, null);
holder = new ViewHolder();
holder.textView = (TextView) convertView
.findViewById(R.id.textView1);
holder.button = (Button) convertView.findViewById(R.id.button1);
convertView.setTag(holder);
holder = (ViewHolder) convertView.getTag();
holder.textView.setText(mContentList.get(position));
holder.button.setOnClickListener(mListener);
holder.button.setTag(position);
return convertV
public class ViewHolder {
public TextView textV
* 用于回调的抽象类
* @author Ivan Xu
public static abstract class MyClickListener implements OnClickListener {
* 基类的onClick方法
public void onClick(View v) {
myOnClick((Integer) v.getTag(), v);
public abstract void myOnClick(int position, View v);
Activity类:
1 package com.ivan.
3 import java.util.ArrayL
4 import java.util.L
6 import android.app.A
7 import android.os.B
8 import android.view.M
9 import android.view.V
10 import android.widget.AdapterV
11 import android.widget.AdapterView.OnItemClickL
12 import android.widget.ListV
13 import android.widget.T
15 import com.ivan.adapter.ContentA
16 import com.ivan.adapter.ContentAdapter.MyClickL
17 import com.ivan.listvieweventabstract.R;
19 public class MainActivity extends Activity implements OnItemClickListener {
// 模拟listview中加载的数据
private static final String[] CONTENTS = { "北京", "上海", "广州", "深圳", "苏州",
"南京", "武汉", "长沙", "杭州" };
private List&String& contentL
private ListView mListV
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
private void init() {
mListView = (ListView) findViewById(R.id.listview);
contentList = new ArrayList&String&();
for (int i = 0; i & CONTENTS. i++) {
contentList.add(CONTENTS[i]);
//实例化ContentAdapter类,并传入实现类
mListView.setAdapter(new ContentAdapter(this, contentList, mListener));
mListView.setOnItemClickListener(this);
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
//响应item点击事件
public void onItemClick(AdapterView&?& arg0, View v, int position, long id) {
Toast.makeText(this, "listview的item被点击了!,点击的位置是--&" + position,
Toast.LENGTH_SHORT).show();
* 实现类,响应按钮点击事件
private MyClickListener mListener = new MyClickListener() {
public void myOnClick(int position, View v) {
Toast.makeText(
MainActivity.this,
"listview的内部的按钮被点击了!,位置是--&" + position + ",内容是--&"
+ contentList.get(position), Toast.LENGTH_SHORT)
以下是布局文件
1 &RelativeLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" &
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent" &
&/ListView&
17 &/RelativeLayout&
&?xml version="1.0" encoding="utf-8"?&
&LinearLayout xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants"
android:orientation="vertical" &
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="content"
android:textColor="#ff0000"
android:textSize="20sp" /&
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:text="Button"
android:textColor="#ff0000"
android:textSize="20sp" /&
&/LinearLayout&
两种方式的区别在于,抽象类在Activity中实现的时候,只能定义一个成员变量来实现,不能由Activity直接实现,因为Java不支持多继承。而接口既可以由Activity直接实现,也可以由其成员变量来实现。
原创文章,转载请注明出处!
阅读(...) 评论()问题:如何在ListActivity中嵌入不同布局类型的条目?
就是说每条item的布局都可能不一样,也有可能部分的相同,我的用例是这样的:
在ListActivity中,第一条固定为头条推荐,占据屏幕1/4左右。第二、三、四为重点推荐,加起来占据1/4左右。余下的是一群一般的条目,一般的内容,高度不限,屏幕中的下半部能看到它们的一部分,通过ListActivity向下拨动看完所有的内容。
头条推荐和重点推荐是不一样的布局。
这样在一个ListView中能实现吗?解决方案1:
粗略看上去是可以实现的,不过我还从来没用过listactivity。。。不知道是不是跟把listview弄进一个布局是一个道理。
如果是相同的话,你就要在adapter的getview里通过判断分别加载不同的子布局来实现
解决方案2:
可以实现&自己自定义&Adapter&&&继承&&&BaseAdapter&&&&,&根据&position&自定义&布局,&在&getView()方法中每个&position&都写个布局&&,&就是代码写的长一点&,&
以上介绍了“如何在ListActivity中嵌入不同布局类型的条目?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:/itwd/715791.html
上一篇: 下一篇:

我要回帖

更多关于 actionbaractivity v7 的文章

 

随机推荐