Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 上下文菜单显示正确的数据,但listview不显示';T_Java_Android_Sqlite_Listview_Android Listview - Fatal编程技术网

Java 上下文菜单显示正确的数据,但listview不显示';T

Java 上下文菜单显示正确的数据,但listview不显示';T,java,android,sqlite,listview,android-listview,Java,Android,Sqlite,Listview,Android Listview,我有一个非常奇怪的问题,在过去的几个小时里我一直在试图解决,但我找不到哪里出了问题。我有一个包含名称和少量文本的SQLite数据库。当我点击listview时,我会看到连接到名称的文本。但我也有一个“添加到收藏夹”功能,当我将某个内容添加到收藏夹列表时,它会显示在另一个活动中。在新建/收藏夹列表视图(名称、标题和图像)中显示的信息是正确的,但当我单击它时,显示的数据是错误的 在我的原始列表视图中有10行,在我的“收藏”列表视图中,它的顺序与第一行相同。如果我添加了一部电影,例如《卡萨布兰卡》,它

我有一个非常奇怪的问题,在过去的几个小时里我一直在试图解决,但我找不到哪里出了问题。我有一个包含名称和少量文本的SQLite数据库。当我点击listview时,我会看到连接到名称的文本。但我也有一个“添加到收藏夹”功能,当我将某个内容添加到收藏夹列表时,它会显示在另一个活动中。在新建/收藏夹列表视图(名称、标题和图像)中显示的信息是正确的,但当我单击它时,显示的数据是错误的

在我的原始列表视图中有10行,在我的“收藏”列表视图中,它的顺序与第一行相同。如果我添加了一部电影,例如《卡萨布兰卡》,它在我的原始列表中位于第7位,它将在我的新列表视图中位于第一位(位置0),并显示正确的演员、封面和作者。但当我点击它查看更多信息时(开始新的活动)。它仅显示原始列表视图中的信息以及位置0上的电影中的信息

但是如果我点击我的上下文菜单来检查它。它显示了我想要查看的所有正确数据。这太奇怪了,我希望有人知道问题出在哪里?我用数组和字符串/stringbuilder等尝试了很多不同的组合和解决方案。这是我来这里之前写的最后一段代码

 public class Favorites extends ActionBarActivity {

DatabaseHelper dbHelper;
ListView favoritesListView;
Cursor myCursor;
String[] myStringArray = new String[3];
ListViewCursorAdapter myFavsAdapter;
String openBookCmeny = "Öppna boken";
String rmvFavsCmeny = "Ta bort från dina favoriter";
String webSiteCmeny = "Klicka här för mer information på bokens hemsida";
String showWebSiteCmeny;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_favorites);

    dbHelper = DatabaseHelper.getInstance(this);
    myCursor = dbHelper.visaFavoriter();
    dbHelper.getWritableDatabase();
    myFavsAdapter = new ListViewCursorAdapter(this, myCursor);
    favoritesListView = (ListView)findViewById(R.id.favoritesListView);
    favoritesListView.setAdapter(myFavsAdapter);
    registerForContextMenu(favoritesListView);


    favoritesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Cursor c =  (Cursor)myFavsAdapter.getItem(view.getId());
      myStringArray[1]= c.getString(4);

      Intent i = new Intent(Favorites.this, VisaBoken.class);
      i.putExtra(null, myStringArray);
      startActivity(i);

}
    });

}

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    AdapterView.AdapterContextMenuInfo info =  (AdapterView.AdapterContextMenuInfo) menuInfo;

    Cursor c = ((Cursor) myFavsAdapter.getItem(info.position));
    String cTitle = c.getString(2);

    menu.setHeaderTitle(cTitle);
    menu.add(0, v.getId(), 0, openBookCmeny);
    menu.add(0, v.getId(), 0, rmvFavsCmeny);
    menu.add(0, v.getId(), 0, webSiteCmeny);
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();

    Cursor c = ((Cursor) myFavsAdapter.getItem(info.position));
    myStringArray[0] = c.getString(0);
    myStringArray[1] = c.getString(4);
    showWebSiteCmeny = c.getString(6);

    if (item.getTitle() == openBookCmeny){
        Intent i = new Intent(Favorites.this, VisaBoken.class);
        i.putExtra(null, myStringArray);
        startActivity(i);
    }

    else if (item.getTitle() == rmvFavsCmeny){
        dbHelper.removeOneFavorite(myStringArray[0]);
        recreate();

    }
    else if (item.getTitle() == webSiteCmeny){
        Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(showWebSiteCmeny));
        startActivity(browserIntent);
    }
    return super.onContextItemSelected(item);
}
公共类收藏夹扩展了ActionBarActivity{
数据库助手dbHelper;
列表视图收藏夹列表视图;
游标myCursor;
字符串[]myStringArray=新字符串[3];
ListViewCursorAdapter MyFavAdapter;
字符串openBookCmeny=“Öppna boken”;
字符串rmvFavsCmeny=“Ta bort från dina favoriter”;
String webSiteCmeny=“Klicka här för mer information påbokens hemsida”;
字符串showWebSiteCmeny;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_收藏夹);
dbHelper=DatabaseHelper.getInstance(this);
myCursor=dbHelper.visaFavoriter();
dbHelper.getWritableDatabase();
myFavsAdapter=新的ListViewCursorAdapter(此为myCursor);
favoritesListView=(ListView)findViewById(R.id.favoritesListView);
setAdapter(myFavsAdapter);
registerForContextMenu(favoritesListView);
favoritesListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
游标c=(游标)myFavsAdapter.getItem(view.getId());
myStringArray[1]=c.getString(4);
Intent i=新Intent(Favorites.this、VisaBoken.class);
i、 putExtra(null,myStringArray);
星触觉(i);
}
});
}
@凌驾
public void onCreateContextMenu(ContextMenu菜单,视图v,ContextMenu.ContextMenuInfo菜单信息){
super.onCreateContextMenu(menu,v,menuInfo);
AdapterView.AdapterContextMenuInfo信息=(AdapterView.AdapterContextMenuInfo)菜单信息;
游标c=((游标)myFavsAdapter.getItem(info.position));
String cTitle=c.getString(2);
菜单设置标题(cTitle);
添加(0,v.getId(),0,openBookCmeny);
添加(0,v.getId(),0,rmvFavsCmeny);
添加(0,v.getId(),0,webSiteCmeny);
}
@凌驾
公共布尔值onContextItemSelected(MenuItem项){
AdapterView.AdapterContextMenuInfo信息=(AdapterView.AdapterContextMenuInfo)项。getMenuInfo();
游标c=((游标)myFavsAdapter.getItem(info.position));
myStringArray[0]=c.getString(0);
myStringArray[1]=c.getString(4);
showWebSiteCmeny=c.getString(6);
if(item.getTitle()==openBookCmeny){
Intent i=新Intent(Favorites.this、VisaBoken.class);
i、 putExtra(null,myStringArray);
星触觉(i);
}
else if(item.getTitle()==rmvFavsCmeny){
dbHelper.removeOneFavorite(myStringArray[0]);
重新创建();
}
else if(item.getTitle()==webSiteCmeny){
Intent-browserint=新的Intent(Intent.ACTION_视图,Uri.parse(showWebSiteCmeny));
startActivity(浏览器内容);
}
返回super.onContextItemSelected(项目);
}
获取用于显示它的意图和信息的类

 public class VisaBoken extends ActionBarActivity implements AdapterView.OnItemClickListener {

ActionBarDrawerToggle myDrawerToggle;
DrawerLayout myDrawerLayout;
ListView myDrawerListView;
ArrayList<DrawerMenuName> myDrawerMenuName = new ArrayList<>();
DatabaseHelper dbHelper;
public static final String COL_ID = "_id";
public static String Tag = "checkIDfromDB";
TextView visaBokenTV;
String[] myStringArray = new String[2];
String[] myStringArray2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_visa_boken);
    visaBokenTV = (TextView)findViewById(R.id.visaBokenTV);
    Bundle extras = getIntent().getExtras();

    myStringArray = extras.getStringArray(null);
    visaBokenTV.setText(myStringArray[1]);

    myDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
    dbHelper = DatabaseHelper.getInstance(this);
    dbHelper.getWritableDatabase();
公共类VisaBoken扩展ActionBarActivity实现AdapterView.OnItemClickListener{
ActionBarDrawerToggle myDrawerToggle;
抽屉布局我的抽屉布局;
列表视图myDrawerListView;
ArrayList myDrawerMenuName=新的ArrayList();
数据库助手dbHelper;
公共静态最终字符串COL_ID=“_ID”;
公共静态字符串Tag=“checkIDfromDB”;
TextView visaBokenTV;
字符串[]myStringArray=新字符串[2];
字符串[]myStringArray2;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_visa_boken);
visaBokenTV=(TextView)findViewById(R.id.visaBokenTV);
Bundle extras=getIntent().getExtras();
myStringArray=extras.getStringArray(null);
visaBokenTV.setText(myStringArray[1]);
myDrawerLayout=(DrawerLayout)findViewById(R.id.drawer\U布局);
dbHelper=DatabaseHelper.getInstance(this);
dbHelper.getWritableDatabase();

很抱歉,我没有完全理解您对问题的解释。但是我看到一个可疑的代码。 建议,在
public void中更改代码,单击
from:

Cursor c =  (Cursor)myFavsAdapter.getItem(view.getId());
致:

通常,要使用getItem(),需要在ListView中传递位置,从值0开始为顶部。除非为各种视图对象设置了ID,否则不能使用
view.getId()
,但我认为您没有这样做,听起来太棘手了。也许您应该发布适配器(
myFavsAdapter
)代码


让我们先试试,直到我看到其他问题。

谢谢!它工作得很好,问题是我以前使用过该代码,但后来我无法从另一个类中获取位置。这有点难以解释,但在您的解决方案之后,我现在意识到我已经忘记了
Cursor c =  (Cursor)myFavsAdapter.getItem( position );