【问题标题】:How to turn this activity into a fragment?如何把这个活动变成一个片段?
【发布时间】:2016-06-25 20:02:16
【问题描述】:

我正在处理 sql listview ,但是我想将活动类 (CountryListActivity.java) 中的列表视图显示为 tablayout 中的片段。 dbManager=newDBManager(this) 更改为 getActivity 时出现错误,我该如何解决?

package com.trinitytabnavigationdrawer;

import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;

public class CountryListActivity extends ActionBarActivity {

    private DBManager dbManager;

    private ListView listView;

    private SimpleCursorAdapter adapter;

    final String[] from = new String[] {
        DatabaseHelper._ID,
            DatabaseHelper.SUBJECT, DatabaseHelper.DESC
    };

    final int[] to = new int[] {
        R.id.id, R.id.title, R.id.desc
    };

    @
    Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.fragment_emp_list);

        dbManager = new DBManager(this);
        dbManager.open();
        Cursor cursor = dbManager.fetch();

        listView = (ListView) findViewById(R.id.list_view);
        listView.setEmptyView(findViewById(R.id.empty));

        adapter = new SimpleCursorAdapter(this, R.layout.activity_view_record, cursor, from, to, 0);
        adapter.notifyDataSetChanged();

        listView.setAdapter(adapter);

        // OnCLickListiner For List Items
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@
            Override
            public void onItemClick(AdapterView <? > parent, View view, int position, long viewId) {
                TextView idTextView = (TextView) view.findViewById(R.id.id);
                TextView titleTextView = (TextView) view.findViewById(R.id.title);
                TextView descTextView = (TextView) view.findViewById(R.id.desc);

                String id = idTextView.getText().toString();
                String title = titleTextView.getText().toString();
                String desc = descTextView.getText().toString();

                Intent modify_intent = new Intent(getApplicationContext(), ModifyCountryActivity.class);
                modify_intent.putExtra("title", title);
                modify_intent.putExtra("desc", desc);
                modify_intent.putExtra("id", id);

                startActivity(modify_intent);
            }
        });
    }

    @
    Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @
    Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();
        if (id == R.id.add_record) {

            Intent add_mem = new Intent(this, AddCountryActivity.class);
            startActivity(add_mem);

        }
        return super.onOptionsItemSelected(item);
    }

}

数据库管理器类如下:

package com.trinitytabnavigationdrawer;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;

public class DBManager {

    private DatabaseHelper dbHelper;

    private Context context;

    private SQLiteDatabase database;

    public DBManager(Context c) {
        context = c;
    }

    public DBManager open() throws SQLException {
        dbHelper = new DatabaseHelper(context);
        database = dbHelper.getWritableDatabase();
        return this;
    }

    public void close() {
        dbHelper.close();
    }

    public void insert(String name, String desc) {
        ContentValues contentValue = new ContentValues();
        contentValue.put(DatabaseHelper.SUBJECT, name);
        contentValue.put(DatabaseHelper.DESC, desc);
        database.insert(DatabaseHelper.TABLE_NAME, null, contentValue);
    }

    public Cursor fetch() {
        String[] columns = new String[] {
            DatabaseHelper._ID, DatabaseHelper.SUBJECT, DatabaseHelper.DESC
        };
        Cursor cursor = database.query(DatabaseHelper.TABLE_NAME, columns, null, null, null, null, null);
        if (cursor != null) {
            cursor.moveToFirst();
        }
        return cursor;
    }

    public int update(long _id, String name, String desc) {
        ContentValues contentValues = new ContentValues();
        contentValues.put(DatabaseHelper.SUBJECT, name);
        contentValues.put(DatabaseHelper.DESC, desc);
        int i = database.update(DatabaseHelper.TABLE_NAME, contentValues, DatabaseHelper._ID + " = " + _id, null);
        return i;
    }

    public void delete(long _id) {
        database.delete(DatabaseHelper.TABLE_NAME, DatabaseHelper._ID + "=" + _id, null);
    }
}

请我不知道还能做什么!现在已经尝试了一个星期,抱歉我不擅长这个,只是按照一些教程! :(

【问题讨论】:

  • 如果您的错误出现在 Fragment 代码中,请显示 Fragment 以及您如何将其加载到 Activity 中。另外,为错误添加 logcat
  • 没有错误,除非我将活动转换为片段,例如使用 v.findViewById ,当我使用 getActivity() 替换 dbManager = new DBManager(这);
  • 您是否正在尝试将活动转换为片段?我建议将您的“可重用”代码放入片段中。在两个 Activity 中调用该片段。
  • 您需要发布导致错误的代码以及这些错误的详细信息。我们不会猜测您在我们看不到的代码中可能做错了什么。这简直是​​愚蠢的。
  • 无法访问的语句意味着您在标记的行之前有一个返回语句。您需要将 return inflater.inflate... 替换为 View v = inflater.inflate... 并且 然后 在您最终 return v; 之前,您拥有创建数据库处理程序的完全权限

标签: java android sqlite android-layout android-fragments


【解决方案1】:

onAttach (Context context) 而不是 Fragment 的 onCreateView() 方法中初始化 dbManager 和其他需要上下文的对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多