2016-06-13 2 views
0

Im пытается использовать сканер штрих-кода под названием Zxing и im, сталкиваясь с проблемой, чтобы установить значение в редакторе внутри onActivityResult.EditText.setText - ссылка на нулевой объект onActivityResult в фрагменте

Фрагменты Код:

public class UnidadeTabFragment extends Fragment { 

public EditText editarCodigoBarra; 
public static final int DIALOG_FRAGMENT = 1; 


@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

    View v = inflater.inflate(R.layout.tab_fragmento_unidade,container,false); 

    EditText editarCodigoBarra = (EditText) v.findViewById(R.id.codigobarraInput); 
    ImageButton codigoBarraBotao = (ImageButton) v.findViewById(R.id.codigoBarraBotao); 

    Bundle arguments = getArguments(); 
    Log.i("primeiro" , String.valueOf(arguments)); 
    if(arguments != null) 
    { 
     CharSequence codigoBarra = arguments.getCharSequence("codigo"); 
     Log.i("segundo barra" , String.valueOf(arguments)); 
     editarCodigoBarra.setText(codigoBarra); 
    } 

    codigoBarraBotao.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      Intent myIntent = new Intent(getActivity(), BarCodeActivity.class); 
      getActivity().startActivityForResult(myIntent , 12345); 
     } 
    }); 
    return v; 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == 12345) { 
     Bundle bundle = this.getArguments(); 
     CharSequence codigoBarra = bundle.getCharSequence("codigo"); 
     Log.d("Activity Resultado", "value: " + codigoBarra); 
     editarCodigoBarra.setText(codigoBarra); 


    } 
} 

BarCode Actitvity:

public class BarCodeActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler { 

private ZXingScannerView mScannerView; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mScannerView = new ZXingScannerView(this); 
    setContentView(mScannerView); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    mScannerView.setResultHandler(this); // Register ourselves as a handler for scan results. 
    mScannerView.setAutoFocus(true); 
    mScannerView.startCamera();   // Start camera on resume 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    mScannerView.stopCamera();   // Stop camera on pause 
} 

@Override 
public void handleResult(Result rawResult) { 
    Bundle bundle = new Bundle(); 
    CharSequence codigoString = rawResult.getText(); 
    bundle.putCharSequence("codigo", codigoString); 
    UnidadeTabFragment unidadeTabFragment = new UnidadeTabFragment(); 
    unidadeTabFragment.setArguments(bundle); 
    unidadeTabFragment.onActivityResult(12345, 12345, this.getIntent()); 
    finish(); 


} 

}

В LogCat возвращение 'codigobarra' нормально! но когда он пробует установить любое значение на EditText Эрро приходит:

недействительного android.widget.EditText.setText (java.lang.CharSequence)»на нулевой ссылке на объект

Что им делать неправильно ?

Заранее спасибо

+0

Если вы не получаете достаточного количества ответов, это может помочь переписать код, который вы публикуете, чтобы все было на английском языке - ваш код сложнее отслеживать для неамериканских докладчиков. – theFunkyEngineer

+0

'editarCodigoBarra.setText (codigoBarra);' перед этой строкой проверить 'editarCodigoBarra', является ли это null или нет, и сообщите нам об этом. –

ответ

0

На самом деле вы создаете новый EditText вместо инициализации, который вы хотите, изменить это:

EditText editarCodigoBarra = (EditText) v.findViewById(R.id.codigobarraInput); 

в

editarCodigoBarra = (EditText) v.findViewById(R.id.codigobarraInput); 
+0

Я пробовал, но erro продолжает, в строке 60: editarCodigoBarra.setText (codigoBarra) спасибо. –

+0

Является ли editText R.id.codigobarraInput в вашем макете tab_fragmento_unidade? – Chol

+0

Да, спасибо –

0

я думаю, вы должны попробовать в onActivityResult

View v = inflater.inflate(R.layout.tab_fragmento_unidade,container,false); 
EditText editarCodigoBarra = (EditText) v.findViewById(R.id.codigobarraInput); 

crate новая локальная ссылка не использует глобальную в классе

+0

Привет, Роман, спасибо за ответ, но в onActivityResult у меня нет infalter и ViewGroup. –

0

Спасибо за ответ, ребята, я нашел решение проблемы ... был на моем TabAdapter. Ключ был методом ссылки на фрагмент на адаптере. Я внес некоторые изменения. Bew файлы, которые я обновил.

Fragmento Код:

public class UnidadeTabFragment extends Fragment { 

public EditText editarCodigoBarra; 


@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

    View v = inflater.inflate(R.layout.tab_fragmento_unidade,container,false); 

    editarCodigoBarra = (EditText) v.findViewById(R.id.codigobarraInput); 
    ImageButton codigoBarraBotao = (ImageButton) v.findViewById(R.id.codigoBarraBotao); 


    codigoBarraBotao.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      Fragment fragmentoCodigo = new CodigoBarraFragment(); 
      FragmentManager fragmentManager = getFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.addToBackStack(null); 
      fragmentTransaction.add(R.id.container_body, fragmentoCodigo); 
      fragmentTransaction.commit(); 
     } 
    }); 

    return v; 
} 


public void alteraTextView(String texto) { 
    editarCodigoBarra.setText(texto); 
} 

BarCode Активность изменение фрагмент и поместить правило для камеры работает на андроид> 6 и вызвать ссылку Фрагмента непосредственно из адаптера:

public class CodigoBarraFragment extends Fragment implements ZXingScannerView.ResultHandler { 

private ZXingScannerView mScannerView; 
private static int PERMISSION_REQUEST_CAMERA_SCAN_QR=1; 


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

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v =inflater.inflate(R.layout.tab_fragmento_unidade,container,false); 

    mScannerView = new ZXingScannerView(getActivity()); 

    if (ActivityCompat.checkSelfPermission(getActivity(), android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
     requestPermissions(new String[]{android.Manifest.permission.CAMERA}, PERMISSION_REQUEST_CAMERA_SCAN_QR); 
    } 

    return mScannerView; 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    mScannerView.setResultHandler(this); 
    mScannerView.startCamera(); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    mScannerView.stopCamera(); 

} 

@Override 
public void handleResult(Result result) { 
    Bundle bundle = new Bundle(); 
    String codigoString = result.getText(); 
    bundle.putString("message", codigoString); 
    FragmentManager fragmetn= getFragmentManager(); 
    FragmentTransaction ft = fragmetn.beginTransaction(); 
    fragmetn.beginTransaction(); 
    UnidadeTabFragment frag1 = (UnidadeTabFragment) TabsPagerAdapter.getFragment(0); 
    frag1.alteraTextView(codigoString); 
    fragmetn.popBackStack(); 
    ft.commit(); 
    this.onDestroy(); 

} 

}

TabPag erAdapter Код:

public class TabsPagerAdapter extends FragmentStatePagerAdapter { 

CharSequence Titles[]; 
int NumbOfTabs; 
protected static Hashtable<Integer, WeakReference<Fragment>> fragmentReferences = new Hashtable<>(); 


public TabsPagerAdapter(FragmentManager fm, CharSequence mTitles[], int mNumbOfTabsumb) { 
    super(fm); 
    this.Titles = mTitles; 
    this.NumbOfTabs = mNumbOfTabsumb; 
} 


//This method return the fragment for the every position in the View Pager 
@Override 
public Fragment getItem(int position) { 
    Fragment frag = null; 

    if(position == 0) // if the position is 0 we are returning the First tab 
    { 
     frag = new UnidadeTabFragment(); 
    }else if(position == 1)    
    { 
     frag = new DescricaoTabFragment(); 
    }else if (position == 2) 
    { 
     frag = new ConservacaoTabFragment(); 
    }else 
    { 
     frag = new ResumoTabFragment(); 
    } 

    fragmentReferences.put(position, new WeakReference<Fragment>(frag)); 
    return frag; 

} 

public static Fragment getFragment(int fragmentId) { 
    WeakReference<Fragment> ref = fragmentReferences.get(fragmentId); 
    return ref == null ? null : ref.get(); 
} 


// This method return the titles for the Tabs in the Tab Strip 
@Override 
public CharSequence getPageTitle(int position) { 
    return Titles[position]; 
} 

// This method return the Number of tabs for the tabs Strip 
@Override 
public int getCount() { 
    return NumbOfTabs; 
} 

}

Вот оно, спасибо!

Смежные вопросы