求大神帮忙解答
04-08 15:27:39.683 12378 12378 E AndroidRuntime FATAL EXCEPTION: main
04-08 15:27:39.683 12378 12378 E AndroidRuntime java.lang.IllegalAccessError: tried to access class android.support.v4.app.BaseFragmentActivityGingerbread from class com.zhy.autolayout.AutoLayoutActivity
04-08 15:27:39.683 12378 12378 E AndroidRuntime at com.zhy.autolayout.AutoLayoutActivity.access$Sandroid$support$v4$app$BaseFragmentActivityGingerbread$3(AutoLayoutActivity.java)
04-08 15:27:39.683 12378 12378 E AndroidRuntime at com.zhy.autolayout.AutoLayoutActivity$0$debug.onCreateView(AutoLayoutActivity.java:41)
04-08 15:27:39.683 12378 12378 E AndroidRuntime at com.zhy.autolayout.AutoLayoutActivity.onCreateView(AutoLayoutActivity.java)
04-08 15:27:39.683 12378 12378 E AndroidRuntime at com.note.book.menu.MenuActivity.access$Scom$zhy$autolayout$AutoLayoutActivity$1(MenuActivity.java)
04-08 15:27:39.683 12378 12378 E AndroidRuntime at com.note.book.menu.MenuActivity$0$debug.onCreateView(MenuActivity.java:94)
04-08 15:27:39.683 12378 12378 E AndroidRuntime at com.note.book.menu.MenuActivity.onCreateView(MenuActivity.java)
04-08 15:27:39.683 12378 12378 E AndroidRuntime at com.note.book.MainActivity.access$Scom
你有不正确地使用多线程么?问题在com.zhy.autolayout.AutoLayoutActivity好好检查下
把代码发来看看。。。。。。。。。。。。。
代码
AutoLayoutActivity.java
package com.zhy.autolayout;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.util.AttributeSet;
import android.view.View;
;
/**
Created by zhy on 15/11/19.
*/
public class AutoLayoutActivity extends AppCompatActivity
{
private static final String LAYOUT_LINEARLAYOUT = "LinearLayout";
private static final String LAYOUT_FRAMELAYOUT = "FrameLayout";
private static final String LAYOUT_RELATIVELAYOUT = "RelativeLayout";
@Override
public View onCreateView(String name, Context context, AttributeSet attrs)
{
View view = null;
if (name.equals(LAYOUT_FRAMELAYOUT))
{
view = new AutoFrameLayout(context, attrs);
}
if (name.equals(LAYOUT_LINEARLAYOUT))
{
view = new AutoLinearLayout(context, attrs);
}
if (name.equals(LAYOUT_RELATIVELAYOUT))
{
view = new AutoRelativeLayout(context, attrs);
}
if (view != null) return view;
return super.onCreateView(name, context, attrs);
}
}
MenuActivity.java
package com.note.book.menu;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.note.book.DrawKey;
import com.note.book.R;
import com.zhy.autolayout.AutoLayoutActivity;
import android.view.View;
import android.util.AttributeSet;
import android.content.Context;
public abstract class MenuActivity extends AutoLayoutActivity
{
private LinearLayout title;
private TextView textTitle;
private DrawKey menuKey;
private DrawKey findKey;
private ImageView iconView;
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO: Implement this method
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
// setContentView(R.layout.main);
}
// public final MenuActivity initTitle()
// {
// title = (LinearLayout)findViewById(R.id.title);
// textTitle = (TextView)findViewById(R.id.text_title);
// menuKey = (DrawKey)findViewById(R.id.meun_key);
// findKey = (DrawKey)findViewById(R.id.find_key);
//
// menuK
//
// return this;
// }
public void setIcon(Drawable icon)
{
if (icon == null)return;
iconView=new ImageView(this);
LinearLayout.LayoutParams lp = new
LinearLayout.LayoutParams(50, LayoutParams.FILL_PARENT);
lp.setMargins(10,10,10,10);
iconView.setScaleType(ImageView.ScaleType.FIT_XY);
iconView.setImageDrawable(icon);
title.addView(iconView, 0, lp);
}
public void setIcon(int resIcon)
{
if (resIcon == 0) return;
iconView=new ImageView(this);
LinearLayout.LayoutParams lp = new
LinearLayout.LayoutParams(50, LayoutParams.FILL_PARENT);
lp.setMargins(10,10,10,10);
iconView.setScaleType(ImageView.ScaleType.FIT_XY);
iconView.setImageResource(resIcon);
title.addView(iconView, 0, lp);
}
public Drawable getIcon()
{
return iconView.getDrawable();
}
@Override
public View onCreateView(String name, Context context, AttributeSet attrs){
// TODO: Implement this method
return super.onCreateView(name, context, attrs);
}
protected abstract boolean onMenuKeyDown(MenuWindow menu, int keyCode, KeyEvent keyEvent);
protected abstract boolean onCreateMeun(NoteMenu meun);
protected void onMenuItemClick(MenuItem item)
{
}
}
MainActivity.java
package com.note.book;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.animation.AlphaAnimation;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import com.note.book.adapter.NoteBookAdapter;
import com.note.book.dialog.EditDialog;
import com.note.book.menu.MenuActivity;
import com.note.book.menu.MenuItem;
import com.note.book.menu.MenuWindow;
import com.note.book.menu.NoteMenu;
import com.readystatesoftware.systembartint.SystemBarTintManager;
import java.io.File;
import java.io.IOException;
import java.io.ObjectOutputStream;
import android.util.AttributeSet;
import android.content.Context;
public class MainActivity extends MenuActivity{
private NoteBookAdapter adapter;
private ListView notebookList;
private LinearLayout title;
private LinearLayout batchTitle;
private TextView hint;
private String def_path;
private File file;
private int mode;
private final int OK=1;
private final int CREATE_DIALOG = 0;
private final int CREATE_DIR_DIALOG = 1;
private final int POTION_DIALOG=2;
private final int RANAME_DIALOG=3;
private final int COPY=1;
private final int MOVE=2;
private void deleteFile(final int index){
final ProgressDialog pd=new ProgressDialog(this);
pd.setMax(100);
pd.setMessage("正在加载");
pd.setCancelable(false);
pd.show();
final Handler h=new Handler()
{
@Override
public void handleMessage(Message msg){
if (msg.arg1 == OK){
adapter.notifyDataSetChanged();
if (adapter.isEmpty() && hint.getVisibility() != View.VISIBLE)
hint.setVisibility(View.VISIBLE);
pd.dismiss();
}
}
};
new Thread(new Runnable(){
@Override
public void run(){
adapter.delete(adapter.dataAt(index));
Message m=new Message();
m.arg1 = OK;
m.setTarget(h);
m.sendToTarget();
}
}).start();
}
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
setTranslucentStatus(this, true);
}
SystemBarTintManager s = new SystemBarTintManager(this);
s.setNavigationBarTintEnabled(true);
s.setNavigationBarTintResource(R.color.system_bar_clor);
hint = (TextView)findViewById(R.id.tv_hint);
if (savedInstanceState == null)
return;
adapter = savedInstanceState.getParcelable("data");
adapter.setContext(this);
}
@Override
public View onCreateView(String name, Context context, AttributeSet attrs){
// TODO: Implement this method
return super.onCreateView(name, context, attrs);
}
@TargetApi(19)
private void setTranslucentStatus(Activity p1, boolean p2){
WindowManager.LayoutParams params = p1.getWindow().getAttributes();
int bits=WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
if (p2){
params.flags |= bits;
}else{
params.flags &= ~bits;
}
p1.getWindow().setAttributes(params);
}
@Override
protected void onResume(){
// TODO: Implement this method
super.onResume();
if (notebookList != null){
if (notebookList.getAdapter() == null)
notebookList.setAdapter(adapter);
return;
}
if (adapter != null){
notebookList = (ListView)findViewById(R.id.notebook_list);
notebookList.setAdapter(adapter);
if (adapter.isEmpty() && hint.getVisibility() == View.VISIBLE){
hint.setVisibility(View.GONE);
}
return;
}
init();
}
@Override
protected void onSaveInstanceState(Bundle outState){
// TODO: Implement this method
super.onSaveInstanceState(outState);
outState.putParcelable("data", adapter);
}
private void open(final String name){
final ProgressDialog pd=new ProgressDialog(this);
pd.setMax(100);
pd.setMessage("正在加载");
pd.setCancelable(false);
pd.show();
final Handler h=new Handler()
{
@Override
public void handleMessage(Message msg){
if (msg.arg1 == OK){
if (adapter.isEmpty())
hint.setVisibility(View.VISIBLE);
adapter.notifyDataSetChanged();
pd.dismiss();
}
}
};
new Thread(new Runnable(){
@Override
public void run(){
adapter.openDIR(name);
Message m=new Message();
m.arg1 = OK;
m.setTarget(h);
m.sendToTarget();
}
}).start();
}
private void returnDir(){
final ProgressDialog pd=new ProgressDialog(this);
pd.setMax(100);
pd.setMessage("正在加载");
pd.setCancelable(false);
pd.show();
final Handler h=new Handler()
{
@Override
public void handleMessage(Message msg){
if (msg.arg1 == OK){
adapter.notifyDataSetChanged();
if (!adapter.isEmpty()){
hint.setVisibility(View.GONE);
}
pd.dismiss();
}
}
};
new Thread(new Runnable(){
@Override
public void run(){
adapter.returnDIR();
Message m=new Message();
m.arg1 = OK;
m.setTarget(h);
m.sendToTarget();
}
}).start();
}
private void init(){
final ProgressDialog pd=new ProgressDialog(this);
pd.setMessage("请稍候");
pd.setMax(2);
pd.setCancelable(false);
pd.show();
final Handler h=new Handler();
h.post(new Runnable(){
@Override
public void run(){
final DrawKey menuKey=(DrawKey)findViewById(R.id.meun_key);
final DrawKey batchMenu=(DrawKey)findViewById(R.id.menu);
title = (LinearLayout)findViewById(R.id.title);
batchTitle = (LinearLayout)findViewById(R.id.batch_title);
if (null == notebookList)
notebookList = (ListView)findViewById(R.id.notebook_list);
SharedPreferences s = getSharedPreferences("settings", MODE_PRIVATE);
if (adapter == null){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
def_path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS) + "/Notebook";
}else if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
def_path = Environment.getExternalStorageDirectory() + "/Notebook";
}else{
def_path = getFilesDir() + "/Notebook";
}
if (s.getInt("count", 0) == 0){
SharedPreferences.Editor editor=s.edit();
editor.putString("dir_path", def_path);
editor.putInt("count", 1);
editor.commit();
}
adapter = new NoteBookAdapter(MainActivity.this, s.getString("dir_path", def_path));
}
View.OnClickListener menuListener = new View.OnClickListener(){
@Override
public void onClick(View p1){
final MenuWindow menu=new MenuWindow(MainActivity.this);
int activityWidth = getWindow().getDecorView().getWidth();
final int width = (int) (activityWidth * 0.26666667f);
System.out.println(activityWidth);
menu.setWidth(width);
final int xSetoff = ~(int) ((width - menuKey.getWidth()) + activityWidth * 0.008333333f) - 1;
menu.show(menuKey, xSetoff, 0, 0xFF1090FF);
}
};
menuKey.setOnClickListener(menuListener);
batchMenu.setOnClickListener(menuListener);
notebookList.setOnItemClickListener(
new ListView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> p1, View p2, int p3, long p4){
if (p3 == 0){
if (adapter.isReturnDir()){
returnDir();
return;
}
}
if (adapter.isLargeHandle()){
adapter.setChecked(p3);
adapter.notifyDataSetChanged();
return;
}
if (adapter.isDirectory(p3)){
open(adapter.dataAt(p3));
return;
}
}
});
notebookList.setOnItemLongClickListener(new
AdapterView.OnItemLongClickListener(){
@Override
public boolean onItemLongClick(AdapterView<?> p1, View p2, int p3, long p4){
if (adapter.isReturnDir())
if (p3 == 0)
return true;
if (adapter.isLargeHandle())
return true;
Bundle bundle=new Bundle();
bundle.putInt("position", p3);
if (adapter.isDirectory(p3))
bundle.putCharSequenceArray("data", getResources()
.getStringArray(R.array.potion_is_dir_array));
else
bundle.putCharSequenceArray("data", getResources()
.getStringArray(R.array.potion_array));
bundle.putBoolean("is_dir", adapter.isDirectory(p3));
adapter.setIsChecked(p3);
adapter.notifyDataSetChanged();
showCreateDialog(null, POTION_DIALOG, bundle);
return true;
}
});
if (s.getBoolean("is_sort", true))
adapter.sort();
notebookList.setAdapter(adapter);
if (!adapter.isEmpty())
hint.setVisibility(View.GONE);
pd.dismiss();
}
});
}
private void createNewSTFFile(final String name){
final ProgressDialog pd=new ProgressDialog(this);
pd.setMax(100);
pd.setMessage("正在加载");
pd.setCancelable(false);
pd.show();
final Handler h=new Handler();
h.post(new Runnable(){
@Override
public void run(){
adapter.createNewSTFFile(name);
adapter.notifyDataSetChanged();
if (hint.getVisibility() == View.VISIBLE){
hint.setVisibility(View.GONE);
}
pd.dismiss();
}
});
}
private void mkdir(final String name){
final ProgressDialog pd=new ProgressDialog(this);
pd.setMax(100);
pd.setMessage("正在加载");
pd.setCancelable(false);
pd.show();
final Handler h=new Handler();
h.post(new Runnable(){
@Override
public void run(){
adapter.mkdir(name);
adapter.notifyDataSetChanged();
if (hint.getVisibility() == View.VISIBLE){
hint.setVisibility(View.GONE);
}
pd.dismiss();
}
});
}
@Override
protected boolean onCreateMeun(NoteMenu menu){
if (adapter.isLargeHandle()){
menu.add(0, NoteMenu.ITEM_1, 1, "重命名");
menu.add(0, NoteMenu.ITEM_2, 2, "移动");
menu.add(0, NoteMenu.ITEM_3, 3, "复制");
menu.add(0, NoteMenu.ITEM_4, 4, "删除");
}else{
menu.add(0, 0, 1, "新建笔记");
menu.add(0, 1, 1, "新建文件夹");
menu.add(1, 2, 2, "设置");
menu.add(1, 3, 3, "退出");
}
return true;
}
@Override
protected boolean onMenuKeyDown(MenuWindow menu, int keyCode, KeyEvent keyEvent){
switch (keyCode){
case KeyEvent.KEYCODE_BACK:
menu.dismiss();
return true;
default:
return false;
}
}
@Override
protected void onMenuItemClick(MenuItem item){
int id=item.getItemID();
if (adapter.isLargeHandle()){
}else{
switch (id){
case 0:
showCreateDialog("新建笔记", CREATE_DIALOG);
break;
case 1:
showCreateDialog("新建文件夹", CREATE_DIR_DIALOG);
break;
case 2:
break;
case 3:
finish();
break;
default:
break;
}
}
}
private void showCreateDialog(String title, int id){
showCreateDialog(title, id, null);
}
private void showCreateDialog(String title, final int id, final Bundle save){
final EditDialog dialog = new EditDialog(this);
if (id == POTION_DIALOG){
String[] data=(String[])save.getCharSequenceArray("data");
final int position = save.getInt("position");
dialog.setAdapter(new ArrayAdapter<String>(
this
, R.layout.potion_item
, R.id.potion_item_text
, data), new
DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface p1, int p2){
boolean isDir=save.getBoolean("is_dir");
if (!isDir){
System.out.println(isDir);
switch (p2){
case 0:
break;
case 1:
showCreateDialog("新名字", RANAME_DIALOG, save);
break;
case 2:
deleteFile(position);
}
}else{
switch (p2){
case 0:
showCreateDialog("新名字", RANAME_DIALOG, save);
break;
case 1:
deleteFile(position);
case 2:
infoCopyOrMove(COPY);
}
}
}
});
dialog.show();
dialog.setOnDismissListener(new
DialogInterface.OnDismissListener(){
@Override
public void onDismiss(DialogInterface p1){
adapter.setUnchecked(position);
adapter.notifyDataSetChanged();
}
});
return;
}
dialog.setTitle(title);
dialog.setTitleColor(0xff000000);
dialog.setOkClick(new
DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface p1, int p2){
if (id == CREATE_DIALOG)
createNewSTFFile(dialog.getText());
else if (id == RANAME_DIALOG)
adapter.rename(save.getInt("position"), dialog.getText());
else
mkdir(dialog.getText());
adapter.notifyDataSetChanged();
}
});
dialog.show();
}
private void infoCopyOrMove(int mode){
this.mode = mode;
this.file = adapter.getDIR();
AlphaAnimation t = new AlphaAnimation(0, 1);
t.setDuration(300);
AlphaAnimation b = new AlphaAnimation(1, 0);
b.setDuration(300);
title.setVisibility(View.GONE);
batchTitle.setVisibility(View.VISIBLE);
title.startAnimation(b);
batchTitle.startAnimation(t);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
if (keyCode == KeyEvent.KEYCODE_BACK){
if (adapter.isReturnDir()){
returnDir();
return true;
}
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onDestroy(){
// TODO: Implement this method
super.onDestroy();
try{
if (isFinishing()){
ObjectOutputStream out = new ObjectOutputStream(openFileOutput("data obj",MODE_PRIVATE));
out.writeObject(adapter);
System.out.println("保存成功; " + out);
out.close();
}
}catch (IOException e){
Log.e("Main", e.getMessage(), e);
}
}
}