安卓:ListView中的主从模板默认选择第一项 [英] Android: Select first item by default in ListView in Master Detail template
问题描述
我用编程主从RSS阅读器与左边的列表视图,并在右边的详细视图流。
当创建屏幕的右侧是空的,并且选择在左侧没有项目。我怎样才能默认加载的第一个项目?
我发现这个职位它类似于我的问题:<一href=\"http://stackoverflow.com/questions/19132007/select-the-first-item-by-default-in-a-master-detail-flow\">Select默认情况下,主从流程中的第一项
在我ListFragment的code是这样的:
@覆盖
公共无效onActivityCreated(捆绑savedInstanceState){
super.onActivityCreated(savedInstanceState); //设置要调用时,列表应该被刷新的监听器。
ListView控件=(PullToRefreshListView)getListView(); listView.setOnRefreshListener(新OnRefreshListener(){
@覆盖
公共无效onRefresh(){
//刷新列表
refresh_list();
}
}); listView.setVerticalFadingEdgeEnabled(真); //设置自定义列表适配器到ListView
适配器=新CustomListAdapter(getActivity(),饲料);
listView.setAdapter(适配器); //创建按钮,在点击进入网站
最终按钮btnAddMore =新按钮(getActivity());
btnAddMore.setText(R.string.button_text_end_list);
btnAddMore.setBackgroundColor(getResources()的getColor(R.color.white));
btnAddMore.setOnClickListener(新OnClickListener(){
@覆盖
公共无效的onClick(视图v){
//去网站上的点击
字符串URL =http://www.test.de;
意向网络=新意图(Intent.ACTION_VIEW,Uri.parse(URL));
startActivity(网络);
}
});
//在列表视图的末尾添加按钮
listView.addFooterView(btnAddMore);
} @覆盖
公共无效onViewCreated(查看视图,捆绑savedInstanceState){
super.onViewCreated(查看,savedInstanceState); //恢复previously连载激活项目的位置。
如果(savedInstanceState!= NULL
&功放;&安培; savedInstanceState.containsKey(STATE_ACTIVATED_POSITION)){
setActivatedPosition(savedInstanceState
.getInt(STATE_ACTIVATED_POSITION));
} //默认情况下在列表视图中选择第一项
listView.requestFocusFromTouch();
listView.setSelection(0);
listView.performItemClick(ListView控件
。.getAdapter()getView(0,查看,空),0,0);
}@覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState); Log.d(TAG,喂在ItemListFragment); //显示动作条
setHasOptionsMenu(真); //获取参考活动
对myApp = getActivity()getApplication()。 //检查是否从ItemListActivity意图是空
捆绑是= getActivity()getIntent()getExtras()。
如果(是== NULL){
//如果为null读取本地饲料
饲料= ReadFeed(文件名);
Log.d(TAGLese酒店饲料LOKAL:+饲料);
}其他{
//否则得到的额外意图
喂=(RSSFeed中)getActivity()getIntent()getExtras()获得(饲料)。;
Log.d(TAG,
意向冯ItemListActivity一个ItemListFragment vorhanden);
}
}
但我收到此错误:
6月1日至19日:39:14.723:E / AndroidRuntime(1921年):显示java.lang.NullPointerException:产生的原因
六月一日至19日:39:14.723:E / AndroidRuntime(1921年):在ItemListFragment.onViewCreated(ItemListFragment.java:185)
在该行
listView.requestFocusFromTouch();
请帮帮我!
CustomListAdapter
公共类CustomListAdapter延伸BaseAdapter { 私人LayoutInflater layoutInflater;
公共ImageLoader的ImageLoader的;
公众的RSSFeed _feed;
公开日期PDATE; 公共CustomListAdapter(活动活动的RSSFeed供稿){ _feed =饲料; layoutInflater =(LayoutInflater)活动
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ImageLoader的=新ImageLoader的(activity.getApplicationContext());
} 公共无效setNewFeed(RSSFeed中饲料){
//设置新饲料名单,刷新后
_feed =饲料;
} @覆盖
公众诠释的getCount(){
//设置总列表项数
返回_feed.getItemCount();
} @覆盖
公共对象的getItem(INT位置){
返回的位置;
} @覆盖
众长getItemId(INT位置){
返回的位置;
} @覆盖
公共查看getView(INT位置,查看convertView,父母的ViewGroup){ //充气的项目布局和设置的意见
查看的listItem = convertView;
INT POS =位置;
如果(的listItem == NULL){
的listItem = layoutInflater.inflate(R.layout.list_item,NULL);
} //初始化布局的意见
ImageView的IV =(ImageView的)listItem.findViewById(R.id.thumb);
TextView的tvTitle =(TextView中)listItem.findViewById(R.id.title);
TextView的tvDate =(TextView中)listItem.findViewById(R.id.date);
TextView的comment_bubble =(TextView中)listItem.findViewById(R.id.comment_bubble); //设置布局的意见
imageLoader.DisplayImage(_feed.getItem(POS).getImage(),IV);
tvTitle.setText(_feed.getItem(POS).getTitle()); //计算时间差的实际系统时间
字符串pubdate的= _feed.getItem(POS).getDate();
SimpleDateFormat的DF =新的SimpleDateFormat(
EEE,DD MMM YYYY HH:MM:SS,Locale.ENGLISH);
尝试{
尝试{
PDATE = df.parse(pubdate的);
}赶上(java.text.ParseException E){
// TODO自动生成catch块
e.printStackTrace();
}
pubdate的=VOR
+ DateUtils.getDateDifference(PDATE);
}赶上(ParseException的E){
Log.e(日期解析,错误分析日期..); }
//设置时间差
tvDate.setText(pubdate的); //集泡评论
comment_bubble.setText(_feed.getItem(POS).getComment()); 返回的listItem;
}
}
我解决了它这种方式我ListFragment里:
@覆盖
公共无效调用onStart(){
super.onStart(); //设置第一项默认激活
onListItemClick(的ListView,getView(),1,0);
}
/ **
*启用激活上点击模式。当此模式时,列表项将是
*给出的激活状态时感动。
* /
公共无效setActivateOnItemClick(布尔activateOnItemClick){
//当设置CHOICE_MODE_SINGLE,自动的ListView会
触摸时//给项目激活状态。
listView.setChoiceMode(activateOnItemClick?ListView.CHOICE_MODE_SINGLE
:ListView.CHOICE_MODE_NONE);
}
I program a RSS reader with Master Detail flow with a list view on the left, and a detail view on the right.
When the screen is created the right side is empty and no item on the left is selected. How can I load the first item by default?
I found this post which is similar to my problem: Select the first item by default in a Master Detail flow
The code in my ListFragment looks like this:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// Set a listener to be invoked when the list should be refreshed.
listView = (PullToRefreshListView) getListView();
listView.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh() {
//refresh list
refresh_list();
}
});
listView.setVerticalFadingEdgeEnabled(true);
// Set custom list adapter to the ListView
adapter = new CustomListAdapter(getActivity(), feed);
listView.setAdapter(adapter);
//create button, on click go to website
final Button btnAddMore = new Button(getActivity());
btnAddMore.setText(R.string.button_text_end_list);
btnAddMore.setBackgroundColor(getResources().getColor(R.color.white));
btnAddMore.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// go to website on click
String url = "http://www.test.de";
Intent web = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(web);
}
});
//add button at the end of the listview
listView.addFooterView(btnAddMore);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// Restore the previously serialized activated item position.
if (savedInstanceState != null
&& savedInstanceState.containsKey(STATE_ACTIVATED_POSITION)) {
setActivatedPosition(savedInstanceState
.getInt(STATE_ACTIVATED_POSITION));
}
//select the first item in the listview by default
listView.requestFocusFromTouch();
listView.setSelection(0);
listView.performItemClick(listView
.getAdapter().getView(0, view, null), 0, 0);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "Hallo in ItemListFragment");
// show ActionBar
setHasOptionsMenu(true);
// get reference to activity
myApp = getActivity().getApplication();
// check if intent from ItemListActivity is null
Bundle be = getActivity().getIntent().getExtras();
if (be == null) {
// if null read local feed
feed = ReadFeed(fileName);
Log.d(TAG, "Lese Feed lokal :" + feed);
} else {
// else get extras from the intent
feed = (RSSFeed) getActivity().getIntent().getExtras().get("feed");
Log.d(TAG,
"Intent von ItemListActivity an ItemListFragment vorhanden");
}
}
But I receive this error:
01-19 06:39:14.723: E/AndroidRuntime(1921): Caused by: java.lang.NullPointerException
01-19 06:39:14.723: E/AndroidRuntime(1921): at ItemListFragment.onViewCreated(ItemListFragment.java:185)
in the line
listView.requestFocusFromTouch();
Please help me!
CustomListAdapter
public class CustomListAdapter extends BaseAdapter {
private LayoutInflater layoutInflater;
public ImageLoader imageLoader;
public RSSFeed _feed;
public Date pDate;
public CustomListAdapter(Activity activity, RSSFeed feed) {
_feed = feed;
layoutInflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader = new ImageLoader(activity.getApplicationContext());
}
public void setNewFeed(RSSFeed feed) {
// set new Feed list, after refresh
_feed = feed;
}
@Override
public int getCount() {
// Set the total list item count
return _feed.getItemCount();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Inflate the item layout and set the views
View listItem = convertView;
int pos = position;
if (listItem == null) {
listItem = layoutInflater.inflate(R.layout.list_item, null);
}
// Initialize the views in the layout
ImageView iv = (ImageView) listItem.findViewById(R.id.thumb);
TextView tvTitle = (TextView) listItem.findViewById(R.id.title);
TextView tvDate = (TextView) listItem.findViewById(R.id.date);
TextView comment_bubble = (TextView) listItem.findViewById(R.id.comment_bubble);
// Set the views in the layout
imageLoader.DisplayImage(_feed.getItem(pos).getImage(), iv);
tvTitle.setText(_feed.getItem(pos).getTitle());
// calculate the time difference to the actual system time
String pubDate = _feed.getItem(pos).getDate();
SimpleDateFormat df = new SimpleDateFormat(
"EEE, dd MMM yyyy HH:mm:ss",Locale.ENGLISH);
try {
try {
pDate = df.parse(pubDate);
} catch (java.text.ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pubDate = "Vor "
+ DateUtils.getDateDifference(pDate);
} catch (ParseException e) {
Log.e("DATE PARSING", "Error parsing date..");
}
//set time difference
tvDate.setText(pubDate);
//set comment in bubble
comment_bubble.setText(_feed.getItem(pos).getComment());
return listItem;
}
}
I solved it this way inside my ListFragment:
@Override
public void onStart() {
super.onStart();
//set first item activated by default
onListItemClick(listView, getView(), 1, 0);
}
/**
* Turns on activate-on-click mode. When this mode is on, list items will be
* given the 'activated' state when touched.
*/
public void setActivateOnItemClick(boolean activateOnItemClick) {
// When setting CHOICE_MODE_SINGLE, ListView will automatically
// give items the 'activated' state when touched.
listView.setChoiceMode(activateOnItemClick ? ListView.CHOICE_MODE_SINGLE
: ListView.CHOICE_MODE_NONE);
}
这篇关于安卓:ListView中的主从模板默认选择第一项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!