android 外部调用activity 2C

我从一个链接直接进入app里面的某个acitivity,我用scheme
**_

 <intent-filter>
                    <!--下面这几个必须要设置-->
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                    <!--协议部分-->
                <data android:scheme="myapp" android:host="baidu" android:path="/news" android:port="8080"/>
        </intent-filter>**_
            这样写,还是调不起来,有哪位大神,帮忙看下。

6个回答

我记得我的仅仅写了这个 链接以myapp开头就能调起了

缺了

缺了android.intent.category.DEFAULT

其实完全可以自己对连接进行规则定义,不用按照这种通俗的套路来做,点击跳转加载链接之前先对连接进行解析

谢谢各位大哥,小弟最后解决了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Activity中调用 自定义LinearLayout布局文件方法
``` public class LoginActivity extends BaseActivity { private LoginView mLoginView; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { this.mLoginView = new LoginView(this); this.mLoginView.setDataShowPage(this.mType); } } public class LoginView extends LinearLayout { private TextView tv_bind_switch; public LoginView(Context context) { super(context); this.activity = (Activity) context; initView(); } public LoginView(Context context, @Nullable AttributeSet attributeSet) { super(context, attributeSet); this.activity = (Activity) context; initView(); } public LoginView(Context context, @Nullable AttributeSet attributeSet, int i) { super(context, attributeSet, i); this.activity = (Activity) context; initView(); } public void initView(){ LayoutInflater.from(this.activity).inflate(R.layout.view_login_layout,this); this.tv_bind_switch = findViewById(R.id.tv_bind_switch) } public void setDataShowPage{ this.tv_bind_switch.setVisibility(View.GONE); } } ``` //已经初始化的LinearLayout,外部调用更改内部布局,不生效怎么办
从Github上下载的android蓝牙代码,显示外部无法调用非公共
https://github.com/pkarira/Androble 这个是代码链接 我用的是他提供的参考MainActivity 具体代码是 ``` package com.example.snowpig.myble; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ListView; import android.widget.Toast; import com.mdg.androble.BluetoothActivity; import com.mdg.androble.BluetoothManager; import com.mdg.androble.DeviceList; import java.util.Observable; import java.util.Observer; public class MainActivity extends BluetoothActivity { BluetoothManager bluetoothManager; receiveMassage rm; DeviceList dl; String type=""; ListView listview; int c=0; EditText et1; EditText et2; private ArrayAdapter adapter; @Override protected void onCreate(Bundle saveInstanceState){ super.onCreate(saveInstanceState); setContentView(R.layout.activity_main); bluetoothManager=BluetoothManager.getInstance(); rm=new receiveMassage(); dl=new DeviceList(); listview=(ListView)findViewById(R.id.select_dialog_listview); et1=(EditText)findViewById(R.id.text); et2=(EditText)findViewById(R.id.text2); listview.setOnItemClickListener(new AdapterView.OnItemClickListener(){ @Override public void onItemClick(AdapterView<?>parent, View view,int position,long id){ String itemValue=(String) listview.getItemAtPosition(position); bluetoothManager.connectTo(itemValue); } }); adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1); listview.setAdapter(adapter); } public void client(View v) { type = "CLIENT"; bluetoothManager.Type(type); } public void server(View v){ type="SERVER"; bluetoothManager.Type(type); } public void start(View v){ bluetoothManager.setMessageObject(rm); bluetoothManager.setListObject(dl); if (type.equals("CLIENT")){ enableBluetooth(); } if (type.equals("SERVER")){ enableBluetooth(); } } public void clienttoclient(View v){ bluetoothManager.clientToClient(et1.getText().toString(),Integer.parseInt(et2.getText().toString())); } public void devicelist(View v){ if(type.equals("SERVER")) Toast.makeText(getApplicationContext(), bluetoothManager.getAllConnectedDevices(), Toast.LENGTH_LONG).show(); else bluetoothManager.getAllConnectedDevices(); } public void send(View v){ if(type.equals("CLIENT")){ bluetoothManager.sendText(et1.getText().toString()); } if (type.equals("SERVER")){ bluetoothManager.sendText(et1.getText().toString(),Integer.parseInt(et2.getText().toString())); } } public void disconnect(View v){ Toast.makeText(getApplicationContext(),bluetoothManager.disconnect(),Toast.LENGTH_LONG).show(); } class receiveMassage implements Observer{ @Override public void update(Observable observable,Object data){ final String msg=((receivemsg)observable).getMessage(); runOnUiThread(new Runnable(){ public void run(){ Toast.makeText(MainActivity.this,msg,Toast.LENGTH_LONG).show(); } }); } } class DeviceList implements Observer{ @Override public void update(Observable observable,Object data){ if(((com.mdg.androble.DeviceList)observable).getContent().equals("bluetooth enabled")){ bluetoothManager.scanClients(); } else adapter.add(((com.mdg.androble.DeviceList)observable).getContent()); } } } ``` 报错的内容是 1、类MainActivity 没有变量bm ——改为bluetoothManager出现新错误:unhandled exception:java.io.IOException 2、类MainActivity.receiveMassage 没有类receivemsg 3&5、getContent()在DeviceList中不是公共的 4、scanClients()在BluetoothManager中不是公共的
关于android子类重写父类方法,方法体里面的方法的问题
android中子类重写父类Activity方法,在onCreate这个方法的方法体里面有个setContentView方法,这个方法是调用外部方法吗,为什么前面没加this关键词,不是说方法的方法体里面调用外部方法要加this关键词,加了没加有什么区别
android中泛型传入一个外部类,处理后传回原来的类,问题求解!
部分代码如下: 入口类定义一泛型private List<Item_activity> itemlist; itemlist=new ArrayList<Item_activity>(); 创建外部类对象 GetData getdata=new GetData(itemlist); getdata.returndata(); 包中的外部类 public class GetData extends Activity{ private List<Item_activity> itemlist; public GetData(List<Item_activity> itemlist) { super(); this.itemlist = itemlist; } // // // public List<Item_activity> returndata(){ itemlist.add(new Item_activity(R.drawable.ic_launcher, "我是标题", "我是内容")); return itemlist; } 对itemlist赋值处理,返回原类。 问题:itemlist.add(new Item_activity(R.drawable.ic_launcher, "我是标题", "我是内容")),为什么处理语句加载 外部类中的OnCreate().中就无法执行了那,后来我发现在GetData getdata=new GetData(itemlist);时, 没调 用外部类中的OnCreate()。为啥?不是在实例化一个外部类时,必须调用一次OnCreate()吗? 本人初学者忘指导。谢谢了!
调用外部API不成功,显示的什么执行时间长,我实在解决不了了
下面是我的util package textview.exam; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; /** * Created by fei on 2016/6/16. */ public class Shishinews { String httpUrl = "http://apis.baidu.com/songshuxiansheng/news/news"; String httpArg = ""; String jsonResult = request(httpUrl, httpArg); //System.out.println(jsonResult); /** * @param urlAll * :请求接口 * @param httpArg * :参数 * @return 返回结果 */ public static String request(String httpUrl, String httpArg) { BufferedReader reader = null; String result = null; StringBuffer sbf = new StringBuffer(); httpUrl = httpUrl + "?" + httpArg; try { URL url = new URL(httpUrl); HttpURLConnection connection = (HttpURLConnection) url .openConnection(); connection.setRequestMethod("GET"); // 填入apikey到HTTP header connection.setRequestProperty("apikey", "f761aa7e1d7b5ebe4******"); connection.connect(); InputStream is = connection.getInputStream(); reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); String strRead = null; while ((strRead = reader.readLine()) != null) { sbf.append(strRead); sbf.append("\r\n"); } reader.close(); result = sbf.toString(); } catch (Exception e) { e.printStackTrace(); } return result; } } 下面是我fragment的代码 package textview.exam; import android.annotation.SuppressLint; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class FragmentMainchatnews extends Fragment { String httpUrl = "http://apis.baidu.com/songshuxiansheng/news/news"; String httpArg = ""; private String[] title;//新闻标题 private String[] abs;//新闻简介 private String[] image_url;//图片链接地址 Thread thread = null; String newsjson; @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { // TODO Auto-generated method stub View view=inflater.inflate(R.layout.main_chat_news, null); return view; } // 开启线程得到答案 Runnable runnable = new Runnable() { @Override public void run() { newsjson = Shishinews.request(httpUrl, httpArg); Log.v("debug",newsjson); Message message = new Message(); message.what = 1;// 标志是哪个线程传数据 } }; @SuppressLint("HandlerLeak") class MyHandler extends Handler { // 接受message的信息 @Override public void handleMessage(Message msg) { super.handleMessage(msg); try { JSONObject object = new JSONObject(newsjson); newsjson = object.get("retDate").toString(); } catch (JSONException e) { e.printStackTrace(); } if (msg.what == 1) { // 创建一个List集合,List集合的元素是Map List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>(); for (int i = 0; i < title.length; i++) { Map<String, Object> listItem = new HashMap<String, Object>(); listItem.put("image", image_url[i]); listItem.put("title", title[i]); listItem.put("abs", abs[i]); listItems.add(listItem); } // 创建一个SimpleAdapter SimpleAdapter simpleAdapter = new SimpleAdapter(getActivity(), listItems,R.layout.simple_item, new String[]{"image", "title", "abs"}, new int[]{R.id.image, R.id.title ,R.id.abs}); ListView list = (ListView) getView().findViewById(R.id.chat_news); // 为ListView设置Adapter list.setAdapter(simpleAdapter); // 为ListView的列表项的单击事件绑定事件监听器 list.setOnItemClickListener(new AdapterView.OnItemClickListener() { // 第position项被单击时激发该方法 @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent=new Intent(getActivity(),ChatActivity.class); startActivity(intent); } }); // 为ListView的列表项的选中事件绑定事件监听器 list.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { // 第position项被选中时激发该方法 @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { System.out.println(title[position] + "被选中了"); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); } } } public void sendMessage() { if (getView().findViewById(R.id.chat_news)==null) { Toast.makeText(getActivity(), "下拉刷新", Toast.LENGTH_SHORT).show(); } else { // 创建一个List集合,List集合的元素是Map List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>(); for (int i = 0; i < title.length; i++) { Map<String, Object> listItem = new HashMap<String, Object>(); listItem.put("image", image_url[i]); listItem.put("title", title[i]); listItem.put("abs", abs[i]); listItems.add(listItem); } thread = new Thread(runnable); thread.start(); } } } 下面是我AndroidMainfest.xml中的代码 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="textview.exam" > <!-- 添加权限 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.READ_PROFILE" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".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> <activity android:name=".LoginActivity" android:label="@string/title_activity_login" android:windowSoftInputMode="adjustResize|stateHidden" > </activity> <activity android:name=".ChatActivity" android:label="@string/title_activity_chat" > android:labl="聊天" </activity> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> </application> </manifest> 该有的权限我应该都设置了,可是还是不成功,大神们啊,这个我是解决不了了,就想获取个简单的新闻,我连什么关键词都没有
android,这代码运行怎么崩了?
DataBaseHelpe.java ``` package com.example.definecontentprovider; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class DataBaseHelpe extends SQLiteOpenHelper{ public static final String DB_NAME="userdb.db"; public static final String TABLENAME="userinfo"; public static final int DB_VERSION=1; public static final String CREATETABLE="create table"+TABLENAME+"(_id integer primary key,username text,userpassword text);"; public DataBaseHelpe(Context context) { super(context,DB_NAME,null,DB_VERSION); } public void onCreate(SQLiteDatabase db) { db.execSQL(CREATETABLE); } public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) { Log.i("Database update......","Update database from"+oldVersion+"to"+newVersion); db.execSQL("drop table if it exists"+TABLENAME); onCreate(db); } } ``` MainActivity.java ``` package com.example.definecontentprovider; import android.app.Activity; import android.content.ContentResolver; import android.content.ContentUris; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ContentResolver cr=getContentResolver(); //增加记录 ContentValues values=new ContentValues(); values.put("username","admin"); values.put("userpassword","123456"); cr.insert(UserProvider.CONTENT_URI, values); values.clear(); values.put("username","zhangsan"); values.put("userpassword","666666"); cr.insert(UserProvider.CONTENT_URI, values); //查询所有记录 Cursor cursor=cr.query(UserProvider.CONTENT_URI, null, null, null, null); Log.i("after inserted","-------------------------"); while(cursor.moveToNext()){ Log.i("after inserted","id:"+cursor.getString(0)+"username:"+cursor.getString(1)+"userpassword:"+cursor.getString(2)); } cursor.close(); //修改记录 values.clear(); values.put("username","lisi"); //构建的Uri为:"content://com.chapt6.userprovider/userinfo/2" Uri uri=ContentUris.withAppendedId(UserProvider.CONTENT_URI,2); //修改id为2的记录 cr.update(uri, values, null, null); //查询id为2的记录 cursor=cr.query(uri, null, null, null, null); Log.i("after updated","-------------------------"); while(cursor.moveToNext()){ Log.i("after updated","id:"+cursor.getString(0)+"username:"+cursor.getString(1)+"userpassword:"+cursor.getString(2)); } cursor.close(); //删除id为2的记录 cr.delete(uri, null, null); //查询记录 cursor=cr.query(UserProvider.CONTENT_URI, null, null, null, null); Log.i("after deleted","-------------------------"); while(cursor.moveToNext()){ Log.i("after deleted","id:"+cursor.getString(0)+"username:"+cursor.getString(1)+"userpassword:"+cursor.getString(2)); } cursor.close(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } ``` UserProvider.java ``` package com.example.definecontentprovider; import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues; import android.content.UriMatcher; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.util.Log; public class UserProvider extends ContentProvider{ private DataBaseHelpe dbh=null; //发布Content Provider的Uri地址 private static final String AUTHORITY="com.chapt6.userprovider"; public static final Uri CONTENT_URI=Uri.parse("content://com.chapt6.userprovider/userinfo"); //注册需要匹配的Uri private static UriMatcher uriMatcher=new UriMatcher(UriMatcher.NO_MATCH); static { Log.i("info", "static"); //建立URI和URI_CODE之间的关联 uriMatcher.addURI(AUTHORITY, "userinfo",1); uriMatcher.addURI(AUTHORITY, "userinfo/#",2); } //该方法在ContentProvider创建后就会被调用,在其他应用第一次访问它时才会被创建 public boolean onCreate(){ Log.i("info", "onCreate"); dbh=new DataBaseHelpe(getContext()); return false; } //该方法用于返回当前Uri所代表数据的MIME类型 public String getType(Uri uri){ Log.i("info", "getType"); switch (uriMatcher.match(uri)){ case 1://操作的数据类型为集合类型,返回值以vnd.android.cursor.dir/开头 //得到person表的所有数据 return "vnd.android.cursor.dir/userinfo"; case 2://操作的数据类型为非集合类型,返回值以vnd.android.cursor.item/开头 //得到person表下面,每一条数据 return "vnd.android.cursor.item/userinfo"; } return null; } //该方法用于供外部应用从ContentProvider删除数据 public int delete(Uri uri,String selection,String[] selectionArgs){ SQLiteDatabase db=dbh.getWritableDatabase(); int num=0; switch(uriMatcher.match(uri)){ case 1: num=db.delete("userinfo",selection,selectionArgs); break; case 2: long id=ContentUris.parseId(uri); if(selection==null){ selection="_id="+id; } else{ selection="_id="+id+" and ("+selection+")"; } num=db.delete("userinfo",selection,selectionArgs); break; default: break; } getContext().getContentResolver().notifyChange(uri, null); return num; } //该方法用于供外部应用往ContentProvider添加数据 public Uri insert(Uri uri,ContentValues values){ SQLiteDatabase db=dbh.getWritableDatabase(); long id=db.insert("userinfo", null, values); if(id>-1)//插入数据成功 {//构建新插入行的Uri Uri insertUri=ContentUris.withAppendedId(CONTENT_URI, id); //通知所有的观察者,数据集已经改变 getContext().getContentResolver().notifyChange(insertUri, null); return insertUri; } return null; } //该方法用于供外部应用从ContentProvider中获取数据 public Cursor query(Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder){ SQLiteDatabase db=dbh.getReadableDatabase(); Cursor cursor=null; switch(uriMatcher.match(uri)){ case 1: cursor=db.query("userinfo",//表名 null,//列的数组,null代表所有列 selection,//where条件 selectionArgs,//where条件的参数值的数组 null,//分组 null,//having sortOrder);//排序规则 break; case 2: long id=ContentUris.parseId(uri); if(selection==null){ selection="_id="+id; } else{ selection="_id="+id+" and ("+selection+")"; } cursor=db.query("userinfo", null, selection, selectionArgs, null, null, sortOrder); break; default: break; } return cursor; } //该方法用于供外部应用更新ContentProvider中的数据 public int update(Uri uri,ContentValues values,String selection,String[] selectionArgs){ SQLiteDatabase db=dbh.getWritableDatabase(); int num=0; switch(uriMatcher.match(uri)){ case 1: num=db.update("userinfo",values,selection,selectionArgs); break; case 2: long id=ContentUris.parseId(uri); //在selection上增加条件_id=id if(selection==null){ selection="_id="+id; } else{ selection="_id="+id+" and ("+selection+")"; } num=db.update("userinfo",values,selection,selectionArgs); break; default: break; } getContext().getContentResolver().notifyChange(uri, null); return num; } } ``` AndroidManifest.xml ``` <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.example.definecontentprovider" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".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> <provider tools:ignore="ExportedContentProvider" android:name="com.chapt6.UserProvider" android:authorities="com.chapt6.userprovider" android:exported="false"> </provider> </application> </manifest> ``` activity_main.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: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="com.example.definecontentprovider.MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout> ```
Android 使用下拉刷新框架(SmartRefreshLayout),报错Error inflating class
我是一名小白,在学习安卓,刚接触到导入外部的框架,看到github上的项目SmartRefreshLayout,就想试用一下,但配置好后一直闪退,报错日志:Unable to start activity ComponentInfo{com.zhang.hp.muke_test/com.zhang.hp.muke_test.MainActivity}: android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class com.scwang.smartrefresh.layout.SmartRefreshLayout, xml文件写法: ``` <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <com.scwang.smartrefresh.layout.SmartRefreshLayout android:id="@+id/pull" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </com.scwang.smartrefresh.layout.SmartRefreshLayout> </androidx.constraintlayout.widget.ConstraintLayout> ``` MainActivity写法: ``` tv = findViewById(R.id.text); myrefresh = findViewById(R.id.pull); myrefresh.setOnRefreshListener(new OnRefreshListener() { //激活下拉刷新的时候调用的函数 @Override public void onRefresh(RefreshLayout refreshLayout) { tv.setText("下拉刷新了"); myrefresh.finishRefresh(); } }); myrefresh.setOnLoadMoreListener(new OnLoadMoreListener() { @Override public void onLoadMore(RefreshLayout refreshLayout) { tv.setText("上拉加载了"); myrefresh.finishLoadMore(); } }); myrefresh.setEnableLoadMore(true); myrefresh.autoRefresh(); ``` 不知道哪里出错了,希望各位大神能指导一下,谢谢了!
android 关于listview convertview的一些问题,求解!
![图片说明](https://img-ask.csdn.net/upload/201603/14/1457947694_116075.png) 做的是一个聊天界面,这是adapter代码。 运行时只能输入一次,输第二次时,参数convertview是第二次view的对象,不知道为什么啊。 ``` package com.example.chattest; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.Window; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; public class ChatActivity extends Activity implements OnClickListener { private Button btnSend; private ListView lvChat; private EditText etSendContent; //聊天内容的适配器 private ChatMsgViewAdapter chatMsgAdapter; //聊天内容 private List<ChatMsgInfo> chatMsgDataArrays = new ArrayList<ChatMsgInfo>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //不显示标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.chat); initView(); initData(); } //初始化视图 private void initView() { lvChat = (ListView) findViewById(R.id.chat_listview); btnSend = (Button) findViewById(R.id.btn_send); btnSend.setOnClickListener(this); etSendContent = (EditText) findViewById(R.id.et_sendmessage); } //聊天数据 //private final static int COUNT = 10 private String text = new String("第1种写法果然最慢,第二种写法由于用了StringBuffer,快了很多。奇怪的是" + "第4种写法竟然也很快,比用StringBuffer还快,怎么回事?其实慢,第二种写" + "法由于用了StringBuffer,快了很多。奇怪的是第4种写法竟然也很快,比用StringBuffer还快,怎" + "比用StringBuffer还快,怎么回事?其r还快,怎么回事?其回事?其如果你调试过字符串连接的执行过程就会知"); private String date = new String("2016-3-10 18:11"); //初始化数据 private void initData() { ChatMsgInfo msgExample = new ChatMsgInfo("XiaoMing", date, text, true); chatMsgDataArrays.add(msgExample); chatMsgAdapter = new ChatMsgViewAdapter(this, chatMsgDataArrays); //listview绑定adapter lvChat.setAdapter(chatMsgAdapter); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch(v.getId()) { case R.id.btn_send: send(); break; } } //发送按钮的响应函数 private void send() { //获取输入文本框内容 String sendContent = etSendContent.getText().toString(); if (sendContent.length() > 0) { ChatMsgInfo msg = new ChatMsgInfo("XiaoHong", getDate(), sendContent, false); chatMsgDataArrays.add(msg); //通过一个外部的方法控制如果适配器的内容改变时需要强制调用getView来刷新每个Item的内容。 Log.d("chattest", "after setchanged!"); chatMsgAdapter.notifyDataSetChanged(); etSendContent.setText(""); //定位到最后一行 Log.d("chattest", "after setSelection!"); lvChat.setSelection(lvChat.getCount() -1 ); } } //获取时间 private String getDate() { Calendar c = Calendar.getInstance(); String year = String.valueOf(c.get(Calendar.YEAR)); String month = String.valueOf(c.get(Calendar.MONTH)); String day = String.valueOf(c.get(Calendar.DAY_OF_MONTH) + 1); String hour = String.valueOf(c.get(Calendar.HOUR_OF_DAY)); String mins = String.valueOf(c.get(Calendar.MINUTE)); StringBuffer buffer = new StringBuffer(); buffer.append(year + "-" + month + "-" + day + " " + hour + ":" + mins); return buffer.toString(); } } ``` ``` package com.example.chattest; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class ChatMsgViewAdapter extends BaseAdapter { private static final int TYPE_COM_MSG = 0; private static final int TYPE_TO_MSG = 1; //private static final int TAG_KEY_ITEM_TYPE = 0; //private static final int TAG_KEY_VIEWHOLDER = 1; private List<ChatMsgInfo> data;//数据list private LayoutInflater myInflater;//layout convert view对象 private Context context;//环境 //构造 public ChatMsgViewAdapter(Context context, List<ChatMsgInfo> data) { this.context = context; this.data = data; myInflater = LayoutInflater.from(context); } @Override public int getItemViewType(int position) { // TODO Auto-generated method stub ChatMsgInfo msg = data.get(position); if (msg.getMsgType()) { return TYPE_COM_MSG; } else { return TYPE_TO_MSG; } } @Override public int getViewTypeCount() { // TODO Auto-generated method stub return 2; } //获取ListView的个数 @Override public int getCount() { return data.size(); } //获取项 @Override public Object getItem(int position) { return data.get(position); } //获取项的id @Override public long getItemId(int position) { return position; } //获取view @Override public View getView(int position, View convertView, ViewGroup parent) { ChatMsgInfo chatMsg = data.get(position);//聊天数据 boolean isComMsg = chatMsg.getMsgType();//数据类型(发送、接收) LeftItemViewHolder leftViewHolder = null; RightItemViewHolder rightViewHolder = null; int viewType = getItemViewType(position); System.out.println(position + " " + convertView); if (convertView == null || ((Integer)convertView.getTag(R.id.tag_item_viewtype)) != viewType) { //区分消息类别,展示不同的界面 if (viewType == TYPE_COM_MSG) { convertView = myInflater.inflate(R.layout.chat_msg_text_left_item, null); leftViewHolder = new LeftItemViewHolder(); leftViewHolder.tvSendTime = (TextView) convertView.findViewById(R.id.tv_sendtime); leftViewHolder.tvUserName = (TextView) convertView.findViewById(R.id.tv_username); leftViewHolder.tvContent = (TextView) convertView.findViewById(R.id.tv_chatcontent); leftViewHolder.isComMsg = isComMsg; convertView.setTag(R.id.tag_item_viewholder, leftViewHolder); } else { convertView = myInflater.inflate(R.layout.chat_msg_text_right_item, null); rightViewHolder = new RightItemViewHolder(); rightViewHolder.tvSendTime = (TextView) convertView.findViewById(R.id.tv_sendtime); rightViewHolder.tvContent = (TextView) convertView.findViewById(R.id.tv_chatcontent); rightViewHolder.isComMsg = isComMsg; convertView.setTag(R.id.tag_item_viewtype, rightViewHolder); } convertView.setTag(R.id.tag_item_viewtype, viewType); } else { if (viewType == TYPE_COM_MSG) { leftViewHolder = (LeftItemViewHolder) convertView.getTag(R.id.tag_item_viewholder); } else { rightViewHolder = (RightItemViewHolder) convertView.getTag(R.id.tag_item_viewholder); } } if (viewType == TYPE_COM_MSG) { leftViewHolder.tvUserName.setText(chatMsg.getName()); leftViewHolder.tvSendTime.setText(chatMsg.getDate()); leftViewHolder.tvContent.setText(chatMsg.getText()); } else { rightViewHolder.tvSendTime.setText(chatMsg.getDate()); rightViewHolder.tvContent.setText(chatMsg.getText()); } System.out.println(position + " " + convertView); return convertView; } //保存项,显示项的内容 static class LeftItemViewHolder { public TextView tvSendTime; public TextView tvUserName; public TextView tvContent; public boolean isComMsg = true; } static class RightItemViewHolder { public TextView tvSendTime; public TextView tvContent; public boolean isComMsg = true; } } ```
自定义ContentProvider,书上这个代码怎么改?
DataBaseHelpe.java ``` package com.example.definecontentprovider; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class DataBaseHelpe extends SQLiteOpenHelper{ public static final String DB_NAME="userdb.db"; public static final String TABLENAME="userinfo"; public static final int DB_VERSION=1; public static final String CREATETABLE="create table"+TABLENAME+"(_id integer primary key,username text,userpassword text);"; public DataBaseHelpe(Context context) { super(context,DB_NAME,null,DB_VERSION); } public void onCreate(SQLiteDatabase db) { db.execSQL(CREATETABLE); } public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) { Log.i("Database update......","Update database from"+oldVersion+"to"+newVersion); db.execSQL("drop table if it exists"+TABLENAME); onCreate(db); } } ``` MainActivity.java ``` package com.example.definecontentprovider; import android.app.Activity; import android.content.ContentResolver; import android.content.ContentUris; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ContentResolver cr=getContentResolver(); //增加记录 ContentValues values=new ContentValues(); values.put("username","admin"); values.put("userpassword","123456"); cr.insert(UserProvider.CONTENT_URI, values); values.clear(); values.put("username","zhangsan"); values.put("userpassword","666666"); cr.insert(UserProvider.CONTENT_URI, values); //查询所有记录 Cursor cursor=cr.query(UserProvider.CONTENT_URI, null, null, null, null); Log.i("after inserted","-------------------------"); while(cursor.moveToNext()){ Log.i("after inserted","id:"+cursor.getString(0)+"username:"+cursor.getString(1)+"userpassword:"+cursor.getString(2)); } cursor.close(); //修改记录 values.clear(); values.put("username","lisi"); //构建的Uri为:"content://com.chapt6.userprovider/userinfo/2" Uri uri=ContentUris.withAppendedId(UserProvider.CONTENT_URI,2); //修改id为2的记录 cr.update(uri, values, null, null); //查询id为2的记录 cursor=cr.query(uri, null, null, null, null); Log.i("after updated","-------------------------"); while(cursor.moveToNext()){ Log.i("after updated","id:"+cursor.getString(0)+"username:"+cursor.getString(1)+"userpassword:"+cursor.getString(2)); } cursor.close(); //删除id为2的记录 cr.delete(uri, null, null); //查询记录 cursor=cr.query(UserProvider.CONTENT_URI, null, null, null, null); Log.i("after deleted","-------------------------"); while(cursor.moveToNext()){ Log.i("after deleted","id:"+cursor.getString(0)+"username:"+cursor.getString(1)+"userpassword:"+cursor.getString(2)); } cursor.close(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } ``` UserProvider.java ``` package com.example.definecontentprovider; import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues; import android.content.UriMatcher; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; public class UserProvider extends ContentProvider{ private DataBaseHelper dbh=null; //发布Content Provider的Uri地址 private static final String AUTHORITY="com.chapt6.userprovider"; public static final Uri CONTENT_URI=Uri.parse("content://com.chapt6.userprovider/userinfo"); //注册需要匹配的Uri private static UriMatcher uriMatcher=new UriMatcher(UriMatcher.NO_MATCH); static { uriMatcher.addURI(AUTHORITY, "userinfo",1); uriMatcher.addURI(AUTHORITY, "userinfo/#",2); } //该方法在ContentProvider创建后就会被调用,在其他应用第一次访问它时才会被创建 public boolean onCreate(){ dbh=new DataBaseHelper(getContext()); return false; } //该方法用于返回当前Uri所代表数据的MIME类型 public String getType(Uri uri){ switch (uriMatcher.match(uri)){ case 1: return "vnd.android.cursor.dir/userinfo"; case 2: return "vnd.android.cursor.item/userinfo"; } return null; } //该方法用于供外部应用从ContentProvider删除数据 public int delete(Uri uri,String selection,String[] selectionArgs){ SQLiteDatabase db=dbh.getWritableDatabase(); int num=0; switch(uriMatcher.match(uri)){ case 1: num=db.delete("userinfo",selection,selectionArgs); break; case 2: long id=ContentUris.parseId(uri); if(selection==null){ selection="_id="+id; } else{ selection="_id="+id+" and ("+selection+")"; } num=db.delete("userinfo",selection,selectionArgs); break; default: break; } getContext().getContentResolver().notifyChange(uri, null); return num; } //该方法用于供外部应用往ContentProvider添加数据 public Uri insert(Uri uri,ContentValues values){ SQLiteDatabase db=dbh.getWritableDatabase(); long id=db.insert("userinfo", null, values); if(id>-1)//插入数据成功 {//构建新插入行的Uri Uri insertUri=ContentUris.withAppendedId(CONTENT_URI, id); //通知所有的观察者,数据集已经改变 getContext().getContentResolver().notifyChange(insertUri, null); return insertUri; } return null; } //该方法用于供外部应用从ContentProvider中获取数据 public Cursor query(Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder){ SQLiteDatabase db=dbh.getReadableDatabase(); Cursor cursor=null; switch(uriMatcher.match(uri)){ case 1: cursor=db.query("userinfo",//表名 null,//列的数组,null代表所有列 selection,//where条件 selectionArgs,//where条件的参数值的数组 null,//分组 null,//having sortOrder);//排序规则 break; case 2: long id=ContentUris.parseId(uri); if(selection==null){ selection="_id="+id; } else{ selection="_id="+id+" and ("+selection+")"; } cursor=db.query("userinfo", null, selection, selectionArgs, null, null, sortOrder); break; default: break; } return cursor; } //该方法用于供外部应用更新ContentProvider中的数据 public int update(Uri uri,ContentValues values,String selection,String[] selectionArgs){ SQLiteDatabase db=dbh.getWritableDatabase(); int num=0; switch(uriMatcher.match(uri)){ case 1: num=db.update("userinfo",values,selection,selectionArgs); break; case 2: long id=ContentUris.parseId(uri); //在selection上增加条件_id=id if(selection==null){ selection="_id="+id; } else{ selection="_id="+id+" and ("+selection+")"; } num=db.update("userinfo",values,selection,selectionArgs); break; default: break; } getContext().getContentResolver().notifyChange(uri, null); return num; } } ``` AndroidManifest.xml ``` <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.definecontentprovider" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".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> <provider android:name=".UserProvider" android:authorities=".userprovider" android:exported="true"> </provider> </application> </manifest> ``` ![图片说明](https://img-ask.csdn.net/upload/201611/30/1480465682_288883.jpg) ![图片说明](https://img-ask.csdn.net/upload/201611/30/1480465698_552314.jpg) ![图片说明](https://img-ask.csdn.net/upload/201611/30/1480465719_835043.jpg)
RecycleView代码不更新!
RecycleView代码不更新!更新代码应该怎么写呢,有没有人教一下 网络数据取到了,Recycleview 没显示出来数据 ``` public class FoodFragment extends Fragment { public RecyclerView mFoodRecyclerView;//定义RecyclerView //定义以goodsentity实体类为对象的数据集合 private ArrayList<FoodEntity> goodsEntityList = new ArrayList<FoodEntity>(); //自定义recyclerveiw的适配器 private FoodRecycleAdapter mRecyclerAdapter; private JSONArray array; public FoodFragment() { } private static ChangeFoodFragment changeFoodFragment; public static FoodFragment newInstance(ChangeFoodFragment foodFragment){ changeFoodFragment = foodFragment; Bundle args = new Bundle(); FoodFragment fragment = new FoodFragment(); fragment.setArguments(args); return fragment; } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.recyclerview_food, container, false); //对recycleview进行配置 return view; } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); initData(); initRecyclerView(view); } private void initData() { new Thread(){ public void run() { String url = DocUtil.food_list; OkHttpClient okHttpClient = new OkHttpClient(); String token= CacheUtils.getString(getActivity(), "token", ""); RequestBody body = new FormBody.Builder() .add("token",token) .build(); Request request = new Request.Builder() .url(url) .post(body) .build(); Call call = okHttpClient.newCall(request); try { Response response = call.execute(); //System.out.println(response.body().string()); try { final String string=response.body().string(); final JSONObject object=new JSONObject(string); array=object.getJSONArray("list"); System.out.println(array); if(array.length()>0) { try { FoodEntity foodEntity =new FoodEntity(); for(int i=0;i<array.length();i++){ JSONObject object1=array.getJSONObject(i); foodEntity.setFoodtitle(object1.getString("foodtitle")); foodEntity.setFoodcontent(object1.getString("foodcontent")); foodEntity.setFoodcontentimg(object1.getString("foodcontentimg")); System.out.println(object1.getString("foodtitle")); System.out.println(object1.getString("foodcontent")); System.out.println(object1.getString("foodcontentimg")); } } catch (Exception e) { e.printStackTrace(); } }else { Toast.makeText(getActivity(), "无数据", Toast.LENGTH_SHORT).show(); } } catch (JSONException e) { e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } } }.start(); // for (int i=0;i<10;i++){ // FoodEntity foodEntity =new FoodEntity(); // foodEntity.setName("模拟数据FOOD"+i); // foodEntity.setContent("100"+i); // goodsEntityList.add(foodEntity); // } } private void initRecyclerView(View view) { //获取RecyclerView mFoodRecyclerView=view.findViewById(R.id.food_recyclerView); //创建adapter mRecyclerAdapter = new FoodRecycleAdapter(getActivity(), goodsEntityList); //给RecyclerView设置adapter mFoodRecyclerView.setAdapter( mRecyclerAdapter ); //设置layoutManager,可以设置显示效果,是线性布局、grid布局,还是瀑布流布局 //参数是:上下文、列表方向(横向还是纵向)、是否倒叙 mFoodRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false)); //设置item的分割线 mFoodRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL)); //RecyclerView中没有item的监听事件,需要自己在适配器中写一个监听事件的接口。参数根据自定义 mRecyclerAdapter.setOnItemClickListener(new FoodRecycleAdapter.OnItemClickListener() { @Override public void OnItemClick(View view, FoodEntity data) { Toast.makeText(getActivity(),"我是item",Toast.LENGTH_SHORT).show(); changeToAnotherFragment(); } }); } @SuppressLint("ResourceType") private void changeToAnotherFragment() { changeFoodFragment.changeFoodFragment(); } } ``` ``` public class FoodRecycleAdapter extends RecyclerView.Adapter<FoodRecycleAdapter.myViewHodler>{ private Context context; private ArrayList<FoodEntity> goodsEntityList; private ImageLoaderConfiguration configuration; public DisplayImageOptions imageOptions; private FoodRecycleAdapter adapter; //创建构造函数 public FoodRecycleAdapter(Context context, ArrayList<FoodEntity> goodsEntityList) { //将传递过来的数据,赋值给本地变量 this.context = context;//上下文 this.goodsEntityList = goodsEntityList;//实体类数据ArrayList } /** * 创建viewhodler,相当于listview中getview中的创建view和viewhodler * * @param parent * @param viewType * @return */ @Override public myViewHodler onCreateViewHolder(ViewGroup parent, int viewType) { //创建自定义布局 View itemView = View.inflate(context, R.layout.food_item, null); return new myViewHodler(itemView); } /** * 绑定数据,数据与view绑定 * * @param holder * @param position */ @Override public void onBindViewHolder(myViewHodler holder, int position) { //根据点击位置绑定数据 FoodEntity data = goodsEntityList.get(position); // holder.mItemGoodsImg; configuration = ImageLoaderConfiguration.createDefault(context); ImageLoader.getInstance().init(configuration); imageOptions = DisplayImageOptions.createSimple(); holder.mItemGoodsName.setText(data.foodtitle);//获取实体类中的name字段并设置 holder.mItemContent.setText(data.foodcontent);//获取实体类中的price字段并设置 adapter=new FoodRecycleAdapter(context, goodsEntityList); adapter.notifyItemRangeInserted(position,getItemCount()); // ImageLoader.getInstance().displayImage(DocUtil.base_url+ // data.foodcontentimg, mItemGoodsImg, // imageOptions); } /** * 得到总条数 * * @return */ @Override public int getItemCount() { return goodsEntityList.size(); } //自定义viewhodler class myViewHodler extends RecyclerView.ViewHolder { private ImageView mItemGoodsImg; private TextView mItemGoodsName; private TextView mItemContent; public myViewHodler(View itemView) { super(itemView); mItemGoodsImg = itemView.findViewById(R.id.food_img); mItemGoodsName = itemView.findViewById(R.id.food_title); mItemContent = itemView.findViewById(R.id.tx_content); //点击事件放在adapter中使用,也可以写个接口在activity中调用 //方法一:在adapter中设置点击事件 itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //可以选择直接在本位置直接写业务处理 //Toast.makeText(context,"点击了xxx",Toast.LENGTH_SHORT).show(); //此处回传点击监听事件 if(onItemClickListener!=null){ onItemClickListener.OnItemClick(v, goodsEntityList.get(getLayoutPosition())); } } }); } } /** * 设置item的监听事件的接口 */ public interface OnItemClickListener { /** * 接口中的点击每一项的实现方法,参数自己定义 * * @param view 点击的item的视图 * @param data 点击的item的数据 */ public void OnItemClick(View view, FoodEntity data); } //需要外部访问,所以需要设置set方法,方便调用 private FoodRecycleAdapter.OnItemClickListener onItemClickListener; public void setOnItemClickListener(FoodRecycleAdapter.OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } } ```
recycview中添加底部按钮问题。
我就想在这个recycview中底部添加两个按钮 项目地址链接: https://pan.baidu.com/s/13EzJZ8CrRL6xRiFjUxJXqw 提取码: qjet ![图片说明](https://img-ask.csdn.net/upload/201903/14/1552547394_832120.png) ``` public class CollectFragment extends Fragment { public RecyclerView mCollectRecyclerView;//定义RecyclerView //定义以goodsentity实体类为对象的数据集合 private ArrayList<GoodsEntity> goodsEntityList = new ArrayList<GoodsEntity>(); //自定义recyclerveiw的适配器 private CollectRecycleAdapter mCollectRecyclerAdapter; private static ChangeFragment mChange; public static CollectFragment newInstance(ChangeFragment changeFragment) { mChange = changeFragment; Bundle args = new Bundle(); CollectFragment fragment = new CollectFragment(); fragment.setArguments(args); return fragment; } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //获取fragment的layout View view = inflater.inflate(R.layout.recyclerview, container, false); //对recycleview进行配置 return view; } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); initRecyclerView(view); //模拟数据 initData(); } /** * TODO 模拟数据 */ private void initData() { for (int i=0;i<10;i++){ GoodsEntity goodsEntity=new GoodsEntity(); goodsEntity.setGoodsName("模拟数据"+i); goodsEntity.setGoodsPrice("100"+i); goodsEntityList.add(goodsEntity); } } /** * TODO 对recycleview进行配置 */ private void initRecyclerView(View view) { //获取RecyclerView mCollectRecyclerView=view.findViewById(R.id.collect_recyclerView); //创建adapter mCollectRecyclerAdapter = new CollectRecycleAdapter(getActivity(), goodsEntityList); //给RecyclerView设置adapter mCollectRecyclerView.setAdapter(mCollectRecyclerAdapter); //设置layoutManager,可以设置显示效果,是线性布局、grid布局,还是瀑布流布局 //参数是:上下文、列表方向(横向还是纵向)、是否倒叙 mCollectRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false)); //设置item的分割线 mCollectRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL)); //RecyclerView中没有item的监听事件,需要自己在适配器中写一个监听事件的接口。参数根据自定义 mCollectRecyclerAdapter.setOnItemClickListener(new CollectRecycleAdapter.OnItemClickListener() { @Override public void OnItemClick(View view, GoodsEntity data) { //此处进行监听事件的业务处理 Toast.makeText(getActivity(),"我是item",Toast.LENGTH_SHORT).show(); mChange.changeAttractionsContent(); } }); } } ``` ``` public class CollectRecycleAdapter extends RecyclerView.Adapter<CollectRecycleAdapter.myViewHodler> { private Context context; private ArrayList<GoodsEntity> goodsEntityList; //创建构造函数 public CollectRecycleAdapter(Context context, ArrayList<GoodsEntity> goodsEntityList) { //将传递过来的数据,赋值给本地变量 this.context = context;//上下文 this.goodsEntityList = goodsEntityList;//实体类数据ArrayList } /** * 创建viewhodler,相当于listview中getview中的创建view和viewhodler * * @param parent * @param viewType * @return */ @Override public myViewHodler onCreateViewHolder(ViewGroup parent, int viewType) { //创建自定义布局 View itemView = View.inflate(context, R.layout.item_content, null); return new myViewHodler(itemView); } /** * 绑定数据,数据与view绑定 * * @param holder * @param position */ @Override public void onBindViewHolder(myViewHodler holder, int position) { //根据点击位置绑定数据 GoodsEntity data = goodsEntityList.get(position); // holder.mItemGoodsImg; holder.mItemGoodsName.setText(data.goodsName);//获取实体类中的name字段并设置 holder.mItemGoodsPrice.setText(data.goodsPrice);//获取实体类中的price字段并设置 } /** * 得到总条数 * * @return */ @Override public int getItemCount() { return goodsEntityList.size(); } //自定义viewhodler class myViewHodler extends RecyclerView.ViewHolder { private ImageView mItemGoodsImg; private TextView mItemGoodsName; private TextView mItemGoodsPrice; public myViewHodler(View itemView) { super(itemView); mItemGoodsImg = itemView.findViewById(R.id.tx_news_simple_photos_01); mItemGoodsName = itemView.findViewById(R.id.tx_news_simple_photos_title); mItemGoodsPrice = itemView.findViewById(R.id.tx_news_simple_photos_time); //点击事件放在adapter中使用,也可以写个接口在activity中调用 //方法一:在adapter中设置点击事件 itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //可以选择直接在本位置直接写业务处理 //Toast.makeText(context,"点击了xxx",Toast.LENGTH_SHORT).show(); //此处回传点击监听事件 if(onItemClickListener!=null){ onItemClickListener.OnItemClick(v, goodsEntityList.get(getLayoutPosition())); } } }); } } /** * 设置item的监听事件的接口 */ public interface OnItemClickListener { /** * 接口中的点击每一项的实现方法,参数自己定义 * * @param view 点击的item的视图 * @param data 点击的item的数据 */ public void OnItemClick(View view, GoodsEntity data); } //需要外部访问,所以需要设置set方法,方便调用 private OnItemClickListener onItemClickListener; public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } } ```
130 个相见恨晚的超实用网站,一次性分享出来
相见恨晚的超实用网站 持续更新中。。。
字节跳动视频编解码面经
三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时想着能进去就不错了,管他哪个岗呢,就同意了面试...
win10系统安装教程(U盘PE+UEFI安装)
一、准备工作 u盘,电脑一台,win10原版镜像(msdn官网) 二、下载wepe工具箱 极力推荐微pe(微pe官方下载) 下载64位的win10 pe,使用工具箱制作启动U盘打开软件, 选择安装到U盘(按照操作无需更改) 三、重启进入pe系统 1、关机后,将U盘插入电脑 2、按下电源后,按住F12进入启动项选择(技嘉主板是F12) 选择需要启...
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, ...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Java描述设计模式(19):模板方法模式
本文源码:GitHub·点这里 || GitEE·点这里 一、生活场景 通常一款互联网应用的开发流程如下:业务需求,规划产品,程序开发,测试交付。现在基于模板方法模式进行该过程描述。 public class C01_InScene { public static void main(String[] args) { DevelopApp developApp = n...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n...
第三个java程序(表白小卡片)
前言: &nbsp;向女神表白啦,作为一个程序员,当然也有爱情啦。只不过,虽然前面两个程序都只是学习了基础的语法结构和向量哈希表。这里涉及的是Swing,awt图形用户界面和一点文件输入输出流的知识。 &nbsp; 表白代码如下: 另附:里面的音乐和图片可以放在一个自己创建的包里面,也可以放在src里面,或者使用绝对路径。至于布局,我自己的使用的是简单的排班,简单的继承。后面的程序会慢慢实现。 ...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalking,作者吴晟、刘浩杨 等等 仓库地址: apache/skywalking 更...
化繁为简 - 腾讯计费高一致TDXA的实践之路
导语:腾讯计费是孵化于支撑腾讯内部业务千亿级营收的互联网计费平台,在如此庞大的业务体量下,腾讯计费要支撑业务的快速增长,同时还要保证每笔交易不错账。采用最终一致性或离线补...
Linux网络服务-----实验---PXE和Kickstart的无人值守装机
目录 一.PXE的原理 二.kickstart的原理 三.PXE与kickstart的结合使用自动装机 一.PXE的原理 PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由支持通过网络启动操作系统,再启动过程中,终端要求服务器分配IP地址...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
A*搜索算法概述
编者按:本文作者奇舞团前端开发工程师魏川凯。A*搜索算法(A-star search algorithm)是一种常见且应用广泛的图搜索和寻径算法。A*搜索算法是通过使用启...
程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
从顶级黑客到上市公司老板
一看标题,很多老读者就知道我在写什么了。今天Ucloud成功上市,季昕华成为我所熟悉的朋友里又双叒叕一个成功上市的案例。我们认识大概是十五年多吧,如果没记错,第一次见面应该是2004年,...
蓝桥杯知识点汇总:基础知识和常用算法
文章目录基础语法部分:算法竞赛常用API:算法部分数据结构部分 此系列包含蓝桥杯绝大部分所考察的知识点,以及真题题解~ 基础语法部分: 备战蓝桥杯java(一):一般输入输出 和 快速输入输(BufferedReader&amp;BufferedWrite) 备战蓝桥杯java(二):java编程规范和常用数据类型 备战蓝桥杯java(三):常用功能符以及循环结构和分支结构 备战蓝桥杯java(四...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
强烈推荐10本程序员在家读的书
很遗憾,这个春节注定是刻骨铭心的,新型冠状病毒让每个人的神经都是紧绷的。那些处在武汉的白衣天使们,尤其值得我们的尊敬。而我们这些窝在家里的程序员,能不外出就不外出,就是对社会做出的最大的贡献。 有些读者私下问我,窝了几天,有点颓丧,能否推荐几本书在家里看看。我花了一天的时间,挑选了 10 本我最喜欢的书,你可以挑选感兴趣的来读一读。读书不仅可以平复恐惧的压力,还可以对未来充满希望,毕竟苦难终将会...
Linux自学篇——linux命令英文全称及解释
man: Manual 意思是手册,可以用这个命令查询其他命令的用法。 pwd:Print working directory 意思是密码。 su:Swith user 切换用户,切换到root用户 cd:Change directory 切换目录 ls:List files 列出目录下的文件 ps:Process Status 进程状态 mkdir:Make directory ...
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。
疫情数据接口api
返回json示例 { "errcode":0,//0标识接口正常 "data":{ "date":"2020-01-30 07:47:23",//实时更新时间 "diagnosed":7736,//确诊人数 "suspect":12167,//疑是病例人数 "death":170,//死亡人数 "cur...
智力题(程序员面试经典)
NO.1  有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸。给你一台称重精准的天平,怎么找出比较重的那瓶药丸?天平只能用一次。 解法 有时候,严格的限制条件有可能反倒是解题的线索。在这个问题中,限制条件是天平只能用一次。 因为天平只能用一次,我们也得以知道一个有趣的事实:一次必须同时称很多药丸,其实更准确地说,是必须从19瓶拿出药丸进行称重。否则,如果跳过两瓶或更多瓶药...
疫情防控,开发者集结出战!
作者 | 屠敏出品 | CSDN(ID:CSDNnews)2020 年伊始,病毒肆虐,人心惶惶。截止北京时间 1 月 31 日 15 时 30 分,全国确诊新型冠状病毒肺炎的数字已达到了...
面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他
初识 MyBatis MyBatis 是第一个支持自定义 SQL、存储过程和高级映射的类持久框架。MyBatis 消除了大部分 JDBC 的样板代码、手动设置参数以及检索结果。MyBatis 能够支持简单的 XML 和注解配置规则。使 Map 接口和 POJO 类映射到数据库字段和记录。 MyBatis 的特点 那么 MyBatis 具有什么特点呢?或许我们可以从如下几个方面来描述 MyBati...
对Tomcat的简单概要小结
首先我们必须得知道Tomcat就是一个服务,一个本地服务,我们可以控制启动和停止,我们程序员通过这个服务主要是用来存放我们的java程序,当我们把Java程序放进Tomcat服务中,一旦Tomcat服务启动起来,其他电脑就可以进行网络连通,也就是说其他电脑也可以共同访问这个Java程序。 Tomcat的主要目录的概念 有上面的概念之后,我们再来知道一下tomcat根目录下都有哪些文件,以及这些文...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ...... ...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!...
[网络安全自学篇] 四十五.病毒详解及批处理病毒制作(自启动、修改密码、定时关机、蓝屏、进程关闭)
这是作者的网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您们喜欢,一起进步。前文分享了Windows远程桌面服务漏洞(CVE-2019-0708),并详细讲解该漏洞及防御措施。这篇文章将讲解简单的病毒原理知识,并通过批处理代码制作病毒,包括自动启、修改密码、定时关机、蓝屏、进程关闭等功能。希望这篇基础文章对您有所帮助,更希望大家提高安全意识,学会相关防范,也欢迎大家讨论。
阿里架构师花近十年时间整理出来的Java核心知识pdf(Java岗)
由于细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容! 整理了一份Java核心知识点。覆盖了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。 欢迎大家加入java学习交流社区 点击加入 可获取文中文档 小编推荐: ...
Python基础知识点梳理
python常见知识点梳理 摘要: 本文主要介绍一些平时经常会用到的python基础知识点,用于加深印象。python的详细语法介绍可以查看官方编程手册,也有一些在线网站对python语法进行了比较全面的介绍,比如菜鸟教程: python3 教程|菜鸟教程 本文主要是介绍基础语法,操作实例在另一篇博客中单独介绍: python语言介绍 python是一门解释型语言,python的设计目标: 一门...
相关热词 c# 为空 判断 委托 c#记事本颜色 c# 系统默认声音 js中调用c#方法参数 c#引入dll文件报错 c#根据名称实例化 c#从邮件服务器获取邮件 c# 保存文件夹 c#代码打包引用 c# 压缩效率
立即提问