本文的目的是介绍android-从堆栈获取片段的详细情况,特别关注获取堆栈信息的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解android-从堆栈获取片段的机会,同
本文的目的是介绍android-从堆栈获取片段的详细情况,特别关注获取堆栈信息的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解android-从堆栈获取片段的机会,同时也不会遗漏关于android Jsoup获取网站内容 android获取新闻标题实例、Android Studio – 使用依赖于另一个Android库的Android库构建Android项目、Android TalkBack和片段堆栈、android – 从模型类获取数据到片段的知识。
本文目录一览:- android-从堆栈获取片段(获取堆栈信息)
- android Jsoup获取网站内容 android获取新闻标题实例
- Android Studio – 使用依赖于另一个Android库的Android库构建Android项目
- Android TalkBack和片段堆栈
- android – 从模型类获取数据到片段
android-从堆栈获取片段(获取堆栈信息)
几乎无法从堆栈中获取片段,甚至开始考虑保持单例状态,这可能很糟糕.
像这样保存到后台,并且一直尝试通过标签获取它,否则会给我错误.
Fragment fragment = UserProfileFragment.newInstance(null);
FragmentTransaction trans = getFragmentManager().beginTransaction();
trans.replace(FRAGMENT_PLACE_RESOURCES, fragment);
trans.addToBackStack("profile");
trans.commit();
它只是在这里返回null,所以我不能使用此片段.没有日志.
Fragment fragment2 = getFragmentManager().findFragmentByTag("profile");
解决方法:
getFragmentManager().findFragmentByTag(“ tag”)
仅在您添加了具有特定标签的片段时使用,例如
fragmentTransaction.add(R.id.order_container,mProfileFragment,“ profile”);
要么
fragmentTransaction.replace(R.id.order_container,mProfileFragment,“ soMetag”);
然后,您将可以通过标签找到该片段.
在您的情况下,您要将事务添加到Backstack中,因此您将无法通过标签找到该片段.您只需将事务添加到后退堆栈,而不是片段.而且,您的片段也已从活动中删除并销毁,因此您必须通过弹出后退堆栈来还原事务,而不是按标记查找该片段.
你必须打电话
getFragmentManager().popBackStack(“ profile”);
使该片段返回活动并使其在屏幕上可见.
android Jsoup获取网站内容 android获取新闻标题实例
近期做简单的新闻客户端界面使用到了Jsoup获取,使用起来特别方便,这也是被我一个学长称为学android网络必学的一个东西,在此也是分享一下自己近期所学。
首先还是给出效果:
上面是通过textview显示的一个从网站上获取的所有内容的显示,下面是通过listview显示一下获取的新闻的标题,如此显示比较便于理解。
MainActivity:
import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.text.method.ScrollingMovementMethod; import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.util.ArrayList; import java.util.List; @SuppressWarnings("unused") public class MainActivity extends Activity { private TextView TV_HTMLCode; //此处搞一个TextView主要来显示News列表里面存储的内容,仅仅便于分析和理解 private String URL_EOL = "http://www.cnwust.com/newsList/1_1",TAG = "ATAG"; //这是索要获取内容的网址 private List<News> NewsList; //自定义的News的类,用于存放索要获取新闻的目录、时间以及点击后显示的网址 private ListView LV_Result; private ArrayAdapter<String> LV_Adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); LV_Result = (ListView) findViewById(R.id.LV_Result); TV_HTMLCode = (TextView) findViewById(R.id.TV_HTMLCode); TV_HTMLCode.setMovementMethod(ScrollingMovementMethod.getInstance()); ConnectTask C1 = new ConnectTask(); C1.execute(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main,menu); return true; } public class ConnectTask extends AsyncTask<Void,Void,String> { @Override protected String doInBackground(Void... params) { String result = ConnectEOL(); return result; } @Override protected void onPostExecute(String result) { // TV_HTMLCode.setText(result); NewsList = getNews(result); List<String> NewsTitles = new ArrayList<String>(); for (News news : NewsList) { TV_HTMLCode.append(news.getNewsTitle() + "\n"); TV_HTMLCode.append(news.getNewsTime() + "\n"); TV_HTMLCode.append(news.getNewsUrl() + "\n"); NewsTitles.add(news.getNewsTitle()); } /* 为ListView添加适配器 */ LV_Adapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,NewsTitles); LV_Result.setAdapter(LV_Adapter); /* 为ListView添加点击打开对应网页功能 */ LV_Result.setonItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0,View arg1,int arg2,long arg3) { final Uri uri = Uri.parse(NewsList.get(arg2).getNewsUrl()); final Intent it = new Intent(Intent.ACTION_VIEW,uri); startActivity(it); } }); //此处为了方便就点击就直接调用设备默认浏览器打开网址 super.onPostExecute(result); } } /* 连接EOL的方法 返回整个网页经过截取之后的的源代码 */ public String ConnectEOL() { String result = ""; try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(URL_EOL); HttpResponse response = httpclient.execute(httppost); String Res = EntityUtils.toString(response.getEntity(),"UTF-8"); int st = Res.indexOf("<div id=\"result\">"); int ed = Res.indexOf("<div id=\"pager\">"); //这边算是最重要的部分,代码获取的便是这两段之间的部分。 String content = Res.substring(st,ed); st = content.indexOf("<ul>") + 4; ed = content.indexOf("</ul>"); content = content.substring(st,ed); result = content; } catch (Exception e) { Log.d(TAG,e.toString()); } return result; } /* 对源代码进行解析截取的方法 返回一个News数组 */ public List<News> getNews(String HTMLCode) { List<News> newsList = new ArrayList<News>(); Document doc = Jsoup.parse(HTMLCode); Log.d(TAG,"解析html中"); Elements lis = doc.getElementsByTag("li"); Log.d(TAG,"lis的size " + lis.size()); for (Element li : lis) { String newstime = li.getElementsByTag("span").text(); String newstitle = li.getElementsByTag("a").text(); String newsurl = li.getElementsByTag("a").attr("href"); //这三段算是Jsoup从html中获取内容的关键了,很容易理解。 newsurl = newsurl.replace("/news","http://www.cnwust.com/news"); //直接从html的代码中获取的URL是相对路径,此处使用replace改为绝对路径 Log.d(TAG,newstime); Log.d(TAG,newstitle); Log.d(TAG,newsurl); News newst = new News(); newst.setNewsTime(newstime); newst.setNewsTitle(newstitle); newst.setNewsUrl(newsurl); newsList.add(newst); } return newsList; } }
News:
public class News { private String newsTime; private String newsUrl; private String newsTitle; public News() { } public News(String newsTitle,String newsTime,String newsUrl) { this.newsTime = newsTime; this.newsUrl = newsUrl; this.newsTitle = newsTitle; } public String getNewsTime() { return newsTime; } public void setNewsTime(String newsTime) { this.newsTime = newsTime; } public String getNewsUrl() { return newsUrl; } public void setNewsUrl(String newsUrl) { this.newsUrl = newsUrl; } public String getNewsTitle() { return newsTitle; } public void setNewsTitle(String newsTitle) { this.newsTitle = newsTitle; } }
activity_main:
<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: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=".NewsList" > <TextView android:id="@+id/TV_HTMLCode" android:layout_width="match_parent" android:layout_height="150dp" android:layout_above="@+id/LV_Result" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:scrollbars="vertical" /> <ListView android:id="@+id/LV_Result" android:layout_width="match_parent" android:layout_height="230dp" android:layout_alignLeft="@+id/TV_HTMLCode" android:layout_alignParentBottom="true" > </ListView> </RelativeLayout>
此处对HTML代码的解析可能部分新手还是不太清楚,在此也是建议使用chrome浏览器,可以直接查看网站的源码。(有部分加密的网站看不到)下面看一下具体使用的截图:
1、首先先要打开到你要获取内容的网站
2、右击你要获取的内容,并选择 审查元素。
3、使用Jsoup解析HTML代码。
最后是附上源码下载地址
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
Android Studio – 使用依赖于另一个Android库的Android库构建Android项目
我需要使用Gradle构建一个依赖于Android库项目A的Android项目,该项目取决于另一个Android库项目B.
到目前为止,我有以下内容:
Android项目:
的build.gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'android'
dependencies {
compile project(':LibA')
}
android {
compileSdkVersion 7
buildToolsversion "17.0.0"
}
manifest.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cyborg.template"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="7" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name="com.cyborg.template.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Android库A:
的build.gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'android-library'
dependencies {
compile project(':LibB')
}
android {
compileSdkVersion 7
buildToolsversion "17.0.0"
}
manifest.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.lib.project.a"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="7"/>
</manifest>
Android库B:
的build.gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'android-library'
android {
compileSdkVersion 7
buildToolsversion "17.0.0"
}
manifest.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.lib.project.b"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="7"/>
</manifest>
在尝试构建Android项目时,Android studio报告了以下错误:
Gradle: Execution Failed for task ':LibA:processDebugManifest'.
> Manifest merging Failed. See console for more info.
那个控制台在哪里我想搜索有关错误的更多信息?
我发现了一些关于这个错误的问题,但它似乎与我的情况不一样.
启示?
谢谢,
亚当.
解决方法:
该库的清单文件当前必须具有< application />节点,即使它是空的.
这是我们将在某些时候删除的限制,但现在,只需添加它.
Android TalkBack和片段堆栈
问题在于,对讲焦点设置在底层片段的元素上.
你知道是否有办法将对讲焦点设置在拨号片段上?我只想“禁用”下面的片段以获得焦点
谢谢,
解决方法
我找到了解决方案.您可以在执行片段事务之前禁用第一个片段的可访问性.
rootView = inflater.inflate(R.layout.first_fragment,null,false); rootView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
现在您提交片段事务.第二个片段不会将焦点泄漏到第一个片段.
如果您要回到第一个片段,请不要忘记启用第一个片段的可访问性.
if(rootView != null) { rootView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES); }
android – 从模型类获取数据到片段
我只想要FirstName,LastName,EmailId.
ModelLogin.class
public class ModalLogin implements Parcelable { @Serializedname("result") @Expose private String result; @Serializedname("customer-id") @Expose private String customerId; @Serializedname("error_message") @Expose private String errorMessage; @Serializedname("apiName") @Expose private String apiName; @Serializedname("first_name") @Expose private String firstName; @Serializedname("last_name") @Expose private String lastName; @Serializedname("email") @Expose private String email; @Serializedname("quoteId") @Expose private Integer quoteId; @Serializedname("token") @Expose private String token; protected ModalLogin(Parcel in) { result = in.readString(); customerId = in.readString(); errorMessage = in.readString(); apiName = in.readString(); firstName = in.readString(); lastName = in.readString(); email = in.readString(); token = in.readString(); quoteId = in.readInt(); } public static final Creator<ModalLogin> CREATOR = new Creator<ModalLogin>() { @Override public ModalLogin createFromParcel(Parcel in) { return new ModalLogin(in); } @Override public ModalLogin[] newArray(int size) { return new ModalLogin[size]; } }; /** * * @return * The result */ public String getResult() { return result; } /** * * @param result * The result */ public void setResult(String result) { this.result = result; } /** * * @return * The customerId */ public String getCustomerId() { return customerId; } /** * * @param customerId * The customer-id */ public void setCustomerId(String customerId) { this.customerId = customerId; } /** * * @return * The errorMessage */ public String getErrorMessage() { return errorMessage; } /** * * @param errorMessage * The error_message */ public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; } /** * * @return * The apiName */ public String getApiName() { return apiName; } /** * * @param apiName * The apiName */ public void setApiName(String apiName) { this.apiName = apiName; } /** * * @return * The firstName */ public String getFirstName() { return firstName; } /** * * @param firstName * The first_name */ public void setFirstName(String firstName) { this.firstName = firstName; } /** * * @return * The lastName */ public String getLastName() { return lastName; } /** * * @param lastName * The last_name */ public void setLastName(String lastName) { this.lastName = lastName; } /** * * @return * The email */ public String getEmail() { return email; } /** * * @param email * The email */ public void setEmail(String email) { this.email = email; } /** * * @return * The quoteId */ public String getQuoteId() { String id = ""+quoteId; return id; } /** * * @param quoteId * The quoteId */ public void setQuoteId(String quoteId) { int id = Integer.parseInt(quoteId); this.quoteId = id; } /** * * @return * The token */ public String getToken() { return token; } /** * * @param token * The token */ public void setToken(String token) { this.token = token; } @Override public int describeContents() { return 0; } @Override public void writetoParcel(Parcel dest,int flags) { dest.writeString(result); dest.writeString(customerId); dest.writeString(errorMessage); dest.writeString(apiName); dest.writeString(firstName); dest.writeString(lastName); dest.writeString(email); dest.writeString(token); dest.writeInt(quoteId); } }
现在这是我的片段..
ProfileFragment.class
public class MyProfileFragment extends Fragment { private static final String ARG_ParaM1 = "param1"; private static final String ARG_ParaM2 = "param2"; private String mParam1; private String customerId; private View mLoginFormView,view; private ProgressBar mProgressView; private Button saveAddress,changepassword; private EditText fName,lName,emailId,mobileNo,oldPWD,newPWD; private OnFragmentInteractionListener mListener; private JSONObject jsonObject; private ModalLogin modelLogin; public MyProfileFragment() { // required empty public constructor } // Todo: Rename and change types and number of parameters public static MyProfileFragment newInstance(String param1,String param2) { MyProfileFragment fragment = new MyProfileFragment(); Bundle args = new Bundle(); args.putString(ARG_ParaM1,param1); args.putString(ARG_ParaM2,param2); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mParam1 = getArguments().getString(ARG_ParaM1); customerId = getArguments().getString(ARG_ParaM2); } } @Override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_my_profile,container,false); } @Override public void onViewCreated(View view,Bundle savedInstanceState) { super.onViewCreated(view,savedInstanceState); initViews(view); } private void initViews(View v) { mLoginFormView = (View)v.findViewById(R.id.mainView); mProgressView =(ProgressBar) v.findViewById(R.id.login_progress); view = (View) v.findViewById(R.id.mainV); saveAddress = (Button)v.findViewById(R.id.button_save); changepassword = (Button)v.findViewById(R.id.button_changePwd); fName = (EditText)v.findViewById(R.id.fname); lName =(EditText)v.findViewById(R.id.lname); emailId =(EditText)v.findViewById(R.id.email); mobileNo = (EditText)v.findViewById(R.id.telephone); changepassword.setonClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final Dialog paswordDialog = new Dialog(getActivity(),R.style.FullHeightDialog); paswordDialog.setContentView(R.layout.dialog); paswordDialog.setCancelable(true); //Now that the dialog is set up,it''s time to show it paswordDialog.show(); } }); } // Todo: Rename method,update argument and hook method into UI event public void onButtonpressed(Uri uri) { if (mListener != null) { mListener.onFragmentInteraction(uri); } } @Override public void onAttach(Context context) { super.onAttach(context); if (context instanceof OnFragmentInteractionListener) { mListener = (OnFragmentInteractionListener) context; } else { throw new RuntimeException(context.toString() + " must implement OnFragmentInteractionListener"); } } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } @Override public void onDetach() { super.onDetach(); mListener = null; } public interface OnFragmentInteractionListener { // Todo: Update argument type and name void onFragmentInteraction(Uri uri); } private void showProgress(final boolean show) { mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE); mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); } }
解决方法
public class MyProfileFragment extends Fragment { private static final String ARG_ParaM1 = "param1"; private static final String ARG_ParaM2 = "param2"; // Declare instance here private ModelLogin mModelLogin; private String mParam1; private String customerId; private View mLoginFormView,String param2,ModelLogin mModelLogin) { MyProfileFragment fragment = new MyProfileFragment(); Bundle args = new Bundle(); args.putString(ARG_ParaM1,param2); fragment.setArguments(args); // Initialize instance here fragment.mModelLogin = mModelLogin; return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mParam1 = getArguments().getString(ARG_ParaM1); customerId = getArguments().getString(ARG_ParaM2); // Now you can use wherever you want } } @Override public View onCreateView(LayoutInflater inflater,update argument and hook method into UI event public void onButtonpressed(Uri uri) { if (mListener != null) { mListener.onFragmentInteraction(uri); } } @Override public void onAttach(Context context) { super.onAttach(context); if (context instanceof OnFragmentInteractionListener) { mListener = (OnFragmentInteractionListener) context; } else { throw new RuntimeException(context.toString() + " must implement OnFragmentInteractionListener"); } } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } @Override public void onDetach() { super.onDetach(); mListener = null; } public interface OnFragmentInteractionListener { // Todo: Update argument type and name void onFragmentInteraction(Uri uri); } private void showProgress(final boolean show) { mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE); mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); } }
谢谢 :)
我们今天的关于android-从堆栈获取片段和获取堆栈信息的分享就到这里,谢谢您的阅读,如果想了解更多关于android Jsoup获取网站内容 android获取新闻标题实例、Android Studio – 使用依赖于另一个Android库的Android库构建Android项目、Android TalkBack和片段堆栈、android – 从模型类获取数据到片段的相关信息,可以在本站进行搜索。
本文标签: